Pyside和Qt4返回一个空窗口

时间:2013-11-13 17:17:16

标签: python-2.7 qt4 desktop-application pyside qt-designer

我使用Qt设计器创建了一个界面并将其保存在文件main.ui

所以,我尝试了两种使用python显示窗口的方法,并且都返回了一个空窗口: enter image description here

首次尝试(直接使用main.ui):

from PySide.QtGui import *
from PySide.QtCore import *
from PySide import QtUiTools

class MainApp(QMainWindow):
    def init(self, *args):
        apply(QMainWindow.__init__,(self,) + args)

        loader = QtUiTools.QUiLoader()
        file = QFile("main.ui")
        file.open(QFile.ReadOnly)
        self.myWidget = loader.load(file, self)
        file.close()

        self.setCentralWidget(self.myWidget)

if __name__ == '__main__':
    import sys
    import os
    print "Running in %s.\n" % os.getcwd()

    app = QApplication(sys.argv)
    window = MainApp()
    window.show()

    app.connect(app, SIGNAL("lastWindowClosed()"),
               app, SLOT("quit()")
    )
    app.exec_()

对于第二次尝试,我使用Pyside-uic.exe生成一个main.py文件:

from PySide.QtGui import *
from PySide.QtCore import *
from qt_gui.main import *
import sys

class MainApp(QtGui.QMainWindow, Ui_MainWindow):
    def init(self, parent = None):
        super(MainApp, self).__init__(parent)
        self.setupUi(self)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MainApp()
    window.show()
    sys.exit(app.exec_())

我看到很多例子做同样的事情,但没有一个对我有用。

2 个答案:

答案 0 :(得分:1)

你尝试过这样的事吗?

from PyQt4 import QtCore
from PyQt4 import QtGui

from PyQt4.uic import loadUiType
# This method of the PyQt4.uic module allows for dynamically loading user
# interfaces created by QtDesigner. See the PyQt4 Reference Guide for more
# info.
Ui_Main = \
    loadUiType(os.path.join(os.path.dirname(__file__),'main.ui'))[0]
class MainApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, info):
        """Setup the Properties dialog."""

        super(MainApp, self).__init__(parent)
        self.setupUi(self)

它对我有用。只需将Ui_Main替换为您在.ui文件中使用的名称。

我在这里使用PyQt,但我认为它也适用于PySide

答案 1 :(得分:0)

使用Pyside-uic的第二种方法应该可行,但是你需要正确调用__init__方法(示例代码中缺少下划线):

class MainApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent = None):
        super(MainApp, self).__init__(parent)
        self.setupUi(self)