我使用的是Ubuntu linux。我使用了pyuic4命令,创建了一个.py文件,然后在it.Here中添加了一个消息框,如下所示:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(640, 480)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(190, 200, 98, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 25))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.about)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def about(self):
QtGui.QMessageBox.about(self, "Test", "This is a test.")
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())经过多次实验后,我发现如果我将这个:class Ui_MainWindow(object):改为这个:class Ui_MainWindow(QtGui.QMainWindow):,它就可以工作
我写了一个很大的脚本,我不知道它会不会造成任何问题,或者我做的事情是否正确。我只是感到困惑。如果我的写作有任何问题,请帮助并原谅我。这是我的第一篇文章。
发布于 2013-07-22 18:05:12
我不会以同样的方式使用pyuic4的结果。事实上,我根本不会使用pyuic4,但让我们看看它的可能性:
使用pyuic4
假设您有一个ui文件my_window.ui,您在其中创建了一个名为MainWindow的QMainWindow小部件。使用Designer,您还在按钮的clicked操作和自定义插槽about()之间添加了链接(您知道如何在designer中创建自定义插槽吗?)。现在,使用ui文件可以通过两个步骤完成:
pyuic4生成相当于python的文件ui_my_window.py:$ pyuic4 my_window.ui -o python创建另一个python文件(main.py),该文件将导入文件ui_my_window.py。请勿修改由pyuic4生成的文件!如果重新运行pyuic4命令,该文件将被覆盖!
$ cat main.py from PyQt4 import QtGui #导入创建的类从ui_my_window导入Ui_MainWindow类MyMainWindow(QtGui.QMainWindow):def __init__(self,parent=None) QtGui.QMainWindow.__init__(self,parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) #注意所有的小部件现在都可以通过self.ui属性使用了#获取按钮是这样写的:# self.ui.pushButton def about(self):#这是在Designer QtGui.QMessageBox.about(self,"Test","This is a test“)中创建的自定义插槽。if __name__ == "__main__":导入sys === QtGui.QApplication(sys.argv) myMainWindow = MyMainWindow() myMainWindow.show() app
所以现在你有3个文件:
$ ls
main.py ui_my_window.py my_window.ui只需运行python main.py即可启动图形用户界面。
不使用pyuic4
在处理ui文件时,PyQt4提供了一个非常有用的模块:uic module。实际上,pyuic4正在使用这个模块来生成ui文件的python文件。使用该模块可以避免pyuic4步骤(注意:如果在资源文件(.qrc)中使用图标,则仍然需要使用pyrcc4工具并在代码中导入结果文件)。
在您的示例中,代码变得非常简单:
$ cat main.py
import os
from PyQt4 import QtGui
# import the uic module
from PyQt4 import uic
class MyMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None)
QtGui.QMainWindow.__init__(self, parent)
# Load the ui file
uic.loadUi(os.path.join(os.path.dirname(os.path.abspath(__file__)),"my_window.ui"), self)
# Now in this case, all widgets can directly be accessed because the last argument
# of loadUi is self.
# Getting the push button is written:
# self.pushButton
def about(self):
# this is the custom slot created in Designer
QtGui.QMessageBox.about(self, "Test", "This is a test.")
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
myMainWindow = MyMainWindow()
myMainWindow.show()
sys.exit(app.exec_())在本例中,您只有2个文件:
$ ls
main.py my_window.ui同样,只需运行python main.py即可启动图形用户界面。
https://stackoverflow.com/questions/17737726
复制相似问题