首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示没有MainWindow的Qwidget窗口

显示没有MainWindow的Qwidget窗口
EN

Stack Overflow用户
提问于 2015-11-05 09:10:19
回答 2查看 736关注 0票数 1

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

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

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

代码语言:javascript
复制
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()

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

代码语言:javascript
复制
class myMainClass():

    childWindow = childInputData()

这给了我一个错误:

代码语言:javascript
复制
QWidget: Must construct a QApplication before a QPaintDevice

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

代码语言:javascript
复制
class myMainClass():

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

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

这里怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-05 09:42:56

窗口的显示和脚本的继续是完全正常的:您从未告诉脚本等待用户回答。你刚让它展示了一扇窗户。

您想要的是脚本停止,直到用户完成并关闭窗口。

有一种方法可以做到:

代码语言:javascript
复制
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()被调用”(文档):

脚本将在app.exec_()行上被阻塞,直到窗口关闭。

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

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

来自文档

int QDialog::exec() 将对话框显示为模态对话框,阻塞直到用户关闭。

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

票数 1
EN

Stack Overflow用户

发布于 2015-11-05 09:15:51

您不需要像这样的myMainClass...do:

代码语言:javascript
复制
import sys
from PyQt4 import QtGui
from input_data_window import Ui_Form

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

if __name__ == "__main__":
 app = QtGui.QApplication(sys.argv)
 win = childInputData()
 win.show()
 sys.exit(app.exec_())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33540421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档