【问题标题】:PY Qt Open a QDialog from a QMainWindowPY Qt 从 QMainWindow 打开 QDialog
【发布时间】:2017-11-24 19:15:31
【问题描述】:

我正在处理使用 QT Designer 生成的 python 代码。我想从 MainWindow 上的按钮打开一个新对话框。当我使用以下代码时,对话窗口一创建就消失了。我认为这是因为 QDialog 对象在方法命中返回语句时被破坏。调用此对话的正确方法是什么?

def OpenDialogue(self):

    DialogueWindow = QtGui.QDialog()
    my_dialogue = MyDialogue.Ui_Dialog()
    my_dialogue.setupUi(DialogueWindow)
    DialogueWindow.show()

    return

例如,我是否应该在定义 MainWindow 的同一位置实例化 DialogueWindow 并将其传递给此方法?

MainWindow的构造函数如下:

class Ui_MainWindow(QtGui.QMainWindow, object):

    def setupUi(self, MainWindow):
        [code]

实例化如下:

app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = GUI.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()

【问题讨论】:

  • 可以显示MainWindow类的构造函数
  • 请告诉我我的要求,除此之外你可以试试:DialogueWindow = QtGui.QDialog(self)
  • 如果我将DialogueWindow.show() 更改为DialogueWindow.exec_(),它可以工作!
  • 由于您使用的是 QT Designer,您可能希望通过 uic 将您从 Designer 中准备好的 ui 导入您的代码。我之前通过 uic 将 ui 导入到我的 QDialog 时遇到了一些问题,显示效果很差。然后我检查了这个答案,它神奇地起作用。你可能想看看这里。 stackoverflow.com/questions/40886912/…

标签: python python-2.7 pyqt pyqt4 qt-designer


【解决方案1】:

我将分别通过MainWindow和Dialog模板调用Qt Designer生成的类的Ui_MainWindow和Ui_Dialog。然后最好创建 MainWindow 和 Dialog 实现接口的类。我会将 pushButton 调用到您引用的按钮,然后您必须将父级传递给对话框对象。

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        [...]

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        [...]

class Dialog(QtGui.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setupUi(self)


class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.openDialog)

    def openDialog(self):
        d = Dialog(self)
        d.show()

另一种解决方案是通过以非模态模式打开窗口来使用exec_()

def openDialog(self):
    d = Dialog(self)
    d.exec_()

注意:不建议修改Qt Designer生成的类。

【讨论】:

  • 这是一个从自动生成的类继承的好技巧。每次我不得不重新生成自动生成的代码时,我都会小心翼翼地更新它。
猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多