gpt4 book ai didi

python - PyQt 中遇到 self.close() 后控件不返回

转载 作者:太空宇宙 更新时间:2023-11-03 18:07:11 25 4
gpt4 key购买 nike

我正在尝试使用 PyQt 制作 UI。它有一个非常基本的工作原理。当脚本在终端上运行时,会打开一个询问名称的对话框,并在按下确定时关闭。但是,我无法从 Qt 应用程序返回控制权。

我的代码如下:

class Interactive(QtGui.QWidget):

def __init__(self):
super(Interactive,self).__init__()
self.initGUI()

def initGUI(self):
self.setGeometry(300,300,290,150)
self.setWindowTitle('Input Dialog')
self.show()

self.inputdialog = QtGui.QInputDialog()
self.inputdialog.move(50,50)

text, ok = self.inputdialog.getText(self,'Input Dialog','Enter Your Name:')
#self.text = text
if ok:
self.text = text
print text
self.close()


if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
obj = Interactive()
#app.exec_()
if app.exec_():
sys.exit()
print "somerandomtext"

类内的打印文本正在工作,但我的测试字符串“somerandomtext”没有工作,程序没有结束。

我在 So 上看过类似的问题,但似乎没有一个解决相同的问题。我是否必须为此创建另一个处理程序?

最佳答案

通常,应用程序会在最后一个顶级窗口关闭时自动退出,但在您的示例中不会发生这种情况,因为您不允许事件循环正确启动。

有多种方法可以重新构建示例以避免此问题,但最简单的方法可能是使用这样的计时器:

class Interactive(QtGui.QWidget):
def __init__(self):
super(Interactive,self).__init__()
# delay initialization
# self.initGUI()
...

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
obj = Interactive()
QtCore.QTimer.singleShot(0, obj.initGUI)
app.exec_()
print "somerandomtext"

PS:

deleteLater() 在另一个答案中起作用的原因是因为它将删除事件发布到事件队列(一旦事件循环正确启动,该事件将被处理)。 close() 方法不会以这种方式发布事件,因此应用程序没有机会自动退出。

关于python - PyQt 中遇到 self.close() 后控件不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com