【发布时间】:2019-08-19 23:14:51
【问题描述】:
我很好奇是什么让 QInputDialog 和 QMessageBox.question 总是立即显示?对于其他 PyQT 元素,显示 UI 内容需要一个初始序列。
# Example of a Basic PyQT5 UI Application
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
我一直在努力寻找合适的文档,但没有看到任何突出的东西。所以我希望有人能指出我应该如何修改小部件类或在哪里可以找到合适的文档。
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QLabel, QMessageBox, QHBoxLayout, QInputDialog
from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtGui import QIcon, QPixmap
class QuestionPopup(QWidget):
def __init__(self, question = None):
super().__init__()
self.title = 'Question Popup'
self.left = 250
self.top = 50
self.width = 320
self.height = 200
self.question = question
self._response = None
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
buttonReply = QMessageBox.question(self, 'PyQt5 message', self.question, QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if buttonReply == QMessageBox.Yes:
self.response = True
else:
self.response = False
self.show()
def getText(self):
text, okPressed = QInputDialog.getText(self, "Get text","Your name:", QLineEdit.Normal, "")
if okPressed and text != '':
print(text)
我的目标是创建将显示图像并要求用户输入图像的自定义对话框。我的代码非常复杂,我不能简单地显示一个新的 UI 窗口。我需要让 QMessageBox 和 QInputDialog 立即出现的功能。
【问题讨论】:
-
您能详细解释一下您的意思吗?
-
当然,我相信我可能有点含糊。我有一个已经通过 python + QML 运行的主 UI。我有这个子模块,除了它是由它产生的之外,它对主 UI 没有真正的引用。这个其他 UI 是用 pyqt 编写的。为了从这部分代码中提示用户,我需要有本质上可以自己生成的 UI 元素。 QInputDialog 和 QMessageBox 似乎可以做到这一点。
-
mmmm,你的解释不清楚,自己解释清楚。但另一方面,QML 和 QtWidgets 中的逻辑是不同的,因此使用 QtWidgets 的解决方案(您似乎想要)在 QML 中不一定有效。 立即显示是什么意思?
-
很抱歉。我对 Qt 还是比较陌生,这个项目的范围已经扩大了很多。如果您查看我的原始帖子,如果我在我的主 UI 运行时创建我的 QuestionPopup() 类的实例,它将在我期望的时候被调用。如果我创建一个包含此示例中的代码pythonspot.com/pyqt5-textbox-example 的类,则不会出现该窗口。所以我很好奇是什么让 QMessagebox 和其他 QElement 彼此区分开来。再次抱歉,如果不清楚。
-
@Knoose 你所有的解释都很清楚,eyllanesc 就是搞不懂。
标签: python python-3.x pyqt pyqt5