gpt4 book ai didi

python - Qmessagebox 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:43 25 4
gpt4 key购买 nike

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

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_())

经过多次实验,我发现如果我改变这个就可以了: 类 Ui_MainWindow(对象): 对此:类 Ui_MainWindow(QtGui.QMainWindow):

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

最佳答案

我不会以同样的方式使用 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 ui_my_window.py
  2. 然后创建另一个 python 文件 (main.py),它将导入文件 ui_my_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 文件时提供了一个非常有用的模块: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即可启动GUI。

关于python - Qmessagebox 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17737726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com