Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Qmessagebox不工作_Python_Pyqt_Pyqt4_Qmessagebox - Fatal编程技术网

Python Qmessagebox不工作

Python Qmessagebox不工作,python,pyqt,pyqt4,qmessagebox,Python,Pyqt,Pyqt4,Qmessagebox,我正在使用Ubuntu linux。我使用了pyuic4命令,创建了一个.py文件,然后向其中添加了一个messagebox。它是: from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_MainWindow(object): def setupUi(self, Ma

我正在使用Ubuntu linux。我使用了pyuic4命令,创建了一个.py文件,然后向其中添加了一个messagebox。它是:

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\u主窗口(对象):
为此:
class Ui\u主窗口(QtGui.QMainWindow):

我做了一个大剧本,我不知道它是否会引起任何问题,或者我做的是否正确 事情,我只是糊涂了。如果我的写作有任何问题,请帮助我并原谅我。
这是我的第一篇文章。

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

使用pyuic4 假设您有一个名为
MainWindow
的ui文件
my\u window.ui
,您在其中创建了一个
QMainWindow
小部件。使用Designer,您还添加了按钮的
单击的
操作与自定义插槽
about()
(您知道如何在Designer中创建自定义插槽吗?)之间的链接。现在,可以通过两个步骤来使用ui文件:

  • 使用
    pyuic4
    生成python等效文件
    ui\u my\u window.py

    $ pyuic4 my_window.ui -o ui_my_window.py
    
  • 然后创建另一个python文件(main.py),该文件将导入文件
    ui\u my\u window.py
    不要修改pyuic4生成的文件如果重新运行
    pyuic4
    命令,它将被覆盖

    $ cat main.py
    
    from PyQt4 import QtGui
    # import the class created py pyuic4
    from ui_my_window import Ui_MainWindow
    
    class MyMainWindow(QtGui.QMainWindow):
      def __init__(self, parent=None)
        QtGui.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
    
        # Beware that all widgets are now available through the self.ui attribute
        # Getting the push button is written:
        # self.ui.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_())
    
  • 现在您有3个文件:

          $ ls
          main.py ui_my_window.py my_window.ui
    
    只需运行
    python main.py
    即可启动GUI

    不使用pyuic4 PyQt4在处理ui文件时提供了一个非常有用的模块:。实际上,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
    来启动GUI。

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

    使用pyuic4 假设您有一个名为
    MainWindow
    的ui文件
    my\u window.ui
    ,您在其中创建了一个
    QMainWindow
    小部件。使用Designer,您还添加了按钮的
    单击的
    操作与自定义插槽
    about()
    (您知道如何在Designer中创建自定义插槽吗?)之间的链接。现在,可以通过两个步骤来使用ui文件:

  • 使用
    pyuic4
    生成python等效文件
    ui\u my\u window.py

    $ pyuic4 my_window.ui -o ui_my_window.py
    
  • 然后创建另一个python文件(main.py),该文件将导入文件
    ui\u my\u window.py
    不要修改pyuic4生成的文件如果重新运行
    pyuic4
    命令,它将被覆盖

    $ cat main.py
    
    from PyQt4 import QtGui
    # import the class created py pyuic4
    from ui_my_window import Ui_MainWindow
    
    class MyMainWindow(QtGui.QMainWindow):
      def __init__(self, parent=None)
        QtGui.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
    
        # Beware that all widgets are now available through the self.ui attribute
        # Getting the push button is written:
        # self.ui.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_())
    
  • 现在您有3个文件:

          $ ls
          main.py ui_my_window.py my_window.ui
    
    只需运行
    python main.py
    即可启动GUI

    不使用pyuic4 PyQt4在处理ui文件时提供了一个非常有用的模块:。实际上,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
    启动GUI。

    感谢您的精彩解释。实际上,我不是使用“pyuic4 my_window.ui-o ui_my_window.py”,而是使用这个命令:“pyuic4-x my_window.ui-o ui_my_window.py”。但问题是,当我需要使用这个“类MyMainWindow(对象):”这样我就可以方便地使用Qmessagebox时:“类MyMainWindow(QtGui.QMainWindow):”,如果我手动将“对象”替换为“QtGui.QMainWindow"? 我不知道如何在designer中创建自定义插槽。请告诉我。选项
    -x
    会生成一个可执行的python脚本,但在我介绍的例子中,它将不起作用,因为关于
    的方法还不存在。要从designer中添加自定义插槽,请在主窗口中单击鼠标右键,然后选择“修改信号/插槽”或类似选项(抱歉,我的版本不是英文版本)。将出现一个窗口,允许您向主窗口小部件添加自定义信号和插槽。如果将信号连接到自定义插槽,不要忘记在继承的小部件中实现该插槽,就像我在示例Thank you Frodon中所做的那样。实际上,我首先制作了可执行的python脚本。然后我编辑脚本,添加必要的函数,并管理信号和插槽。这对我来说比较容易。我不必写太多的东西。通过使用第二种方法(没有pyuic4),您就没有太多的东西要写;)谢谢你的解释。实际上,我不是使用“pyuic4 my_window.ui-o ui_my_window.py”,而是使用这个命令:“pyuic4-x my_window.ui-o ui_my_window.py”。但问题是,当我需要使用这个“类MyMainWindow(对象):”这样我就可以方便地使用Qmessagebox时:“类MyMainWindow(QtGui.QMainWindow):”,如果我手动将“对象”替换为“QtGui.QMainWindow"?  我不知道如何在designer中创建自定义插槽。请告诉我。选项
    -x
    会生成一个可执行的python脚本,但在我介绍的例子中,它将不起作用,因为关于
    的方法还不存在。要从designer中添加自定义插槽,请在主窗口中单击鼠标右键,然后选择“修改信号/插槽”或类似选项(抱歉,我的版本不是英文版本)。将出现一个窗口,允许您向主窗口小部件添加自定义信号和插槽。如果将信号连接到自定义插槽,不要忘记在继承的小部件中实现该插槽,就像我在示例Thank you Frodon中所做的那样。实际的