- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用的是 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,但让我们看看可能性:
假设您有 ui 文件 my_window.ui
,您在其中创建了一个名为 MainWindow
的 QMainWindow
小部件。使用 Designer,您还添加了按钮的 clicked
操作与自定义槽 about()
之间的链接(您知道如何在 Designer 中创建自定义槽吗? )。现在使用 ui 文件只需两步即可完成:
您使用 pyuic4
生成 python 等效文件 ui_my_window.py
:
$ pyuic4 my_window.ui -o ui_my_window.py
然后创建另一个 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。
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/
我学习 PyQt5(这对我来说看起来很复杂),我想知道为什么 QMessageBox.Yes(或否)有一些特殊的值(value),对我来说它是 16384。这就是我的意思: from PyQt5 im
我似乎发现了 Qt 5.1 的一个烦人的问题。 假设你有一个系统托盘图标(QSystemTrayIcon)并且你隐藏了你的表单(QDialog),所以: this->hide(); 然后,当表单隐藏时
import time import sys, threading from PyQt4 import QtGui, QtCore from PyQt4.QtGui import QApplicati
我创建了一个与全屏应用程序一起运行的程序。我希望我的程序中的 QMessageBox 显示在全屏运行的应用程序的顶部。 平台是 Windows 7,我使用的是 Qt。 我试过了: QMessageBo
我需要显示简单的错误消息 QMessageBox::critical( nullptr, "My Title", "Text"); 但是对话框显示为空标题。 我做错了什么? PS:操作系统:MacO
我正在构建一个 Qt Symbian 项目,我想向用户显示应在几秒钟后自动关闭的通知。我已经看到诺基亚在他们的用户界面中经常使用它。 现在我正在使用下面的代码,以便用户可以关闭 QMessageBox
如何显示带有三角形感叹号符号的 QMessageBox::warning,如下所示? 我在QMessageBox::warning中找不到任何选项,我只得到红色的圆形符号。 最佳答案 三角形图标应该是
尽管设置了 setStandardButtons(0);它不会关闭 msgBox。 QMessageBox msgBox; msgBox.setText("My List"); msgBox.setS
我想创建一个简单的“关于”对话框,但注意到 QMessageBox::about 不会根据标题的长度调整其大小(由于字体较大,标题通常会更长...... .至少在我的桌面环境中),仅针对内容。有没有办
有没有办法显示一个具有可选择文本的QMessageBox,以便用户能够使用鼠标或键盘以某种方式选择和复制其内容?我知道我可以创建做到这一点的标签,但不确定消息框。 MS Windows 中的标准消息框
我想在计算时使用QMessageBox来阻止其父QDialog。我遇到了类似的事情,但这不起作用。 msgBox = QtWidgets.QMessageBox() msgBox.setWindowT
我正在使用 Qt 框架,但对它有点生疏。 我有两个 QStrings first 和 last 我想在 QMessageBox 中显示它们,但不知道如何包含多个参数。 这就是我必须用 on 参数对其进
我有一个看似简单的任务,但我正在疯狂地尝试解决这个问题。 我正在尝试编写 C++ QT 程序。我需要做的就是在 QMessageBox 中显示一些信息。我在与我的程序相同的目录中有一个文本文件,其中包
基本上我正在学习 Qt C++ 的基础知识,我试图同时打开两个不同的 QMessageBox,但它们相互重叠。我想知道是否有可能将它们并排放置。非常感谢任何关于如何这样做的意见。 额外信息:我使用 Q
我想使用 QMessageBox 向用户宣布一个短暂的等待间隔。 QMessageBox* box(new QMessageBox(QMessageBox::Information,"Parser",
我使用的是 Ubuntu Linux。我使用了 pyuic4 命令并创建了一个 .py 文件,然后向其中添加了一个消息框。如下所示: from PyQt4 import QtCore, QtGui t
我在 QMessageBox 上通过 QMessageBox::addButton() 方法添加了 3 个按钮。如果单击按钮,是否可以防止关闭消息框?默认情况下,每个按钮都会关闭窗口,但我不想为一个按
#include int main(int argc, char** argv) { QApplication app(argc, argv); // first QMess
我有一个问题,对你们中的一些人来说答案很明显,但我就是想不出来。 QMessageBox http://qt-project.org/doc/qt-5/qmessagebox.html有两种显示方式,
我正在尝试通过在 lambda 函数中调用其 show 函数来显示 QMessageBox,如下所示: connect(ui->graphButton, &QAbstractButton::click
我是一名优秀的程序员,十分优秀!