首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qmessagebox不工作

Qmessagebox不工作
EN

Stack Overflow用户
提问于 2013-07-19 11:38:18
回答 1查看 2.1K关注 0票数 1

我使用的是Ubuntu linux。我使用了pyuic4命令,创建了一个.py文件,然后在it.Here中添加了一个消息框,如下所示:

代码语言:javascript
复制
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):,它就可以工作

我写了一个很大的脚本,我不知道它会不会造成任何问题,或者我做的事情是否正确。我只是感到困惑。如果我的写作有任何问题,请帮助并原谅我。这是我的第一篇文章。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-22 18:05:12

我不会以同样的方式使用pyuic4的结果。事实上,我根本不会使用pyuic4,但让我们看看它的可能性:

使用pyuic4

假设您有一个ui文件my_window.ui,您在其中创建了一个名为MainWindowQMainWindow小部件。使用Designer,您还在按钮的clicked操作和自定义插槽about()之间添加了链接(您知道如何在designer中创建自定义插槽吗?)。现在,使用ui文件可以通过两个步骤完成:

  1. 您可以使用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个文件:

代码语言:javascript
复制
      $ ls
      main.py ui_my_window.py my_window.ui

只需运行python main.py即可启动图形用户界面。

不使用pyuic4

在处理ui文件时,PyQt4提供了一个非常有用的模块:uic module。实际上,pyuic4正在使用这个模块来生成ui文件的python文件。使用该模块可以避免pyuic4步骤(注意:如果在资源文件(.qrc)中使用图标,则仍然需要使用pyrcc4工具并在代码中导入结果文件)。

在您的示例中,代码变得非常简单:

代码语言:javascript
复制
$ 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个文件:

代码语言:javascript
复制
      $ ls
      main.py my_window.ui

同样,只需运行python main.py即可启动图形用户界面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17737726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档