gpt4 book ai didi

python - 显示 Qwidget 窗口而不显示 MainWindow

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:22 26 4
gpt4 key购买 nike

我在显示 QWidget 窗口以供用户输入一些数据时遇到问题。

我的脚本没有 GUI,但我只想显示这个小 QWidget 窗口。

我用 QtDesigner 创建了窗口,现在我尝试像这样显示 QWidget 窗口:

from PyQt4 import QtGui
from input_data_window import Ui_Form

class childInputData(QtGui.QWidget ):

def __init__(self, parent=None):
super(childInputData, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.setFocus(True)
self.show()

然后,在我的主课上,我这样做:

class myMainClass():

childWindow = childInputData()

这给了我错误:

QWidget: Must construct a QApplication before a QPaintDevice

所以现在我正在做,从我的主课:

class myMainClass():

app = QtGui.QApplication(sys.argv)
childWindow = childInputData()

现在没有错误,但是窗口显示了两次,并且脚本不会等到输入数据,它只是显示窗口并继续而不等待。

这里出了什么问题?

最佳答案

显示窗口并且脚本继续运行是完全正常的:您从未告诉脚本等待用户回答。您刚刚告诉它显示一个窗口。

您希望脚本停止,直到用户完成操作并关闭窗口。

这是一种方法:

from PyQt4 import QtGui,QtCore
import sys

class childInputData(QtGui.QWidget):

def __init__(self, parent=None):
super(childInputData, self).__init__()
self.show()

class mainClass():

def __init__(self):
app=QtGui.QApplication(sys.argv)
win=childInputData()
print("this will print even if the window is not closed")
app.exec_()
print("this will be print after the window is closed")

if __name__ == "__main__":
m=mainClass()

exec() 方法“进入主事件循环并等待 exit() 被调用”( doc ):
该脚本将被阻塞在 app.exec_() 行上,直到窗口关闭。

注意:使用 sys.exit(app.exec_()) 会导致脚本在窗口关闭时结束。

<小时/>

另一种方法是使用QDialog而不是QWidget。然后将 self.show() 替换为 self.exec(),这将阻止脚本

来自doc :

int QDialog::exec()

Shows the dialog as a modal dialog, blocking until the user closes it

<小时/>

最后,this answer相关问题主张不要使用 exec,而是使用 win.setWindowModality(QtCore.Qt.ApplicationModal) 设置窗口模式。然而,这在这里不起作用:它会阻止其他窗口中的输入,但不会阻止脚本。

关于python - 显示 Qwidget 窗口而不显示 MainWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540421/

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