【问题标题】:pyqt popup window not displaying properlypyqt弹出窗口未正确显示
【发布时间】:2016-04-09 12:26:58
【问题描述】:

我创建了两个不同的 pyqt 窗口,在其中一个窗口中,按下一个按钮,它应该会调出另一个较小的窗口。虽然我的代码几乎完全按照我应该做的那样做,但较小的弹出窗口的显示方式存在问题。

这是我用于显示窗口和按钮功能的代码:

from PyQt4 import QtGui
from EnterprisePassport import Ui_StudentEnterprisePassport
from Session_tracker import Ui_Session_tracker

class StudentEnterprisePassport(Ui_StudentEnterprisePassport):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)
        self.sessionTracker_btn.clicked.connect(self.handleButton)
        self.window2 = None

    def handleButton(self):
        if self.window2 is None:
            self.window2 = Session_tracker(self)
            self.window2.show()

class Session_tracker(Ui_Session_tracker):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = StudentEnterprisePassport()
    window.show()
    sys.exit(app.exec_())

我仍然可以使用窗口内的功能,但是我不能移动它,也不能关闭它,而且没有标题栏。我是否在代码中做错了什么让弹出窗口显示为这样?

编辑:

原始会话跟踪器窗口:Original window 弹出会话跟踪窗口:Popup window

【问题讨论】:

  • 弹出窗口以主窗口为父窗口,我认为是问题所在。请改用self.window2 = Session_tracker()
  • 或者把它改成QDialog而不是QWidget

标签: python button pyqt popupwindow


【解决方案1】:

为了在它自己的窗口中显示另一个小部件,它必须是 QMainWindowQDialog

如果您不想将现有的 Session_tracker 转换为 QDialog,一种选择是将其包装在 QDialog

def handleButton(self):
    if self.window2 is None:
        self.window2 = QtGui.QDialog(self)
        lay = QtGui.QVBoxLayout()
        self.window2.setLayout(lay)
        self.session_tracker = Session_tracker(self.window2)
        lay.addWidget(self.session_tracker)
        self.window2.show()

【讨论】:

  • 谢谢,我已经使用了您的编辑并将其添加到我的代码中,但是我现在面临另一个问题。弹出窗口的显示与原始窗口不同,并且由于某种原因,原始窗口中显示的列现在在弹出窗口中消失了。我在问题中添加了两个窗口的屏幕截图。我还没有编辑会话跟踪器窗口的代码,为什么当我通过弹出窗口打开它时它会更改它?
  • 一个是QMainWIndow,另一个是QDialog,这就是windows不同的原因。如果这些列不存在,则它们不在您的 UI 文件中。原始窗口和弹出对话框是两个不同的小部件——StudentEnterprisePassport 和 SessionTrackers——我不希望它们看起来一样。
  • 对不起,那是我的错。当我创建 UI 时,我将它们都设为 QWidget。我意识到了我的错误,现在改变了,谢谢。
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 2012-02-20
  • 2014-01-24
  • 1970-01-01
  • 2019-12-02
  • 2018-12-12
相关资源
最近更新 更多