我使用Qt设计器创建了一个界面并将其保存在文件main.ui
中所以,我尝试了两种使用python显示窗口的方法,并且都返回了一个空窗口:
首次尝试(直接使用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_())
我看到很多例子做同样的事情,但没有一个对我有用。
答案 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)