python-3.x - 如何修复 QtWidgets.QMessageBox 中的“TypeError ......”以在 PyQT5 中弹出消息
问题描述
当用户在 PyQT5-GUI 应用程序中提交空白或不正确的信息作为用户名和密码时,我想向用户显示弹出信息/警告/等消息。
我很困惑,我不知道问题的根本原因在哪里。
Windows 10 - 64 位 ___ Python 3.6 和 3.7 - 64 位 ____ PyQT5 - 5.11.3
class Ui_MainWindow(object):
def __init__(self):
<skipped>
self.btn_signin.clicked.connect(self.check_userPass) #### User/Pass checking.
<skipped>
def check_userPass(self): # an internal method/function from `Ui_MainWindow`.
username = self.txt_user.text() #a QlineEdit
password = self.txt_pass.text() #a QlineEdit
if len(username) < 2 and len(password) < 2:
QtWidgets.QMessageBox.question(self, "Checkk", "Helllooo", QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Cancel)
###error for above line:
##Traceback (most recent call last):
## File ".\demo_codes.py", line 215, in check_userPass
## QtWidgets.QMessageBox.question(self, 'List manipulation', "Helllooo", QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok)
##TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton): argument 1 has unexpected type 'Ui_MainWindow'
QtWidgets.QMessageBox.question("Checkk", "Helllooo", QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Cancel)
###error for above line:
##Traceback (most recent call last):
## File ".\demo_codes.py", line 215, in check_userPass
## QtWidgets.QMessageBox.question('List manipulation', "Helllooo", QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok)
##TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton): argument 1 has unexpected type 'str'
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
#ui.setupUi(MainWindow) # i renamed `setupUi` to __init__.
MainWindow.show()
sys.exit(app.exec_())
解决方案
尝试一下:
from PyQt5 import QtWidgets, QtCore, QtGui
class Ui_MainWindow(object):
# def __init__(self):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(600, 350)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.txt_user = QtWidgets.QLineEdit(self.centralwidget)
self.txt_user.setGeometry(QtCore.QRect(320, 130, 113, 20))
self.txt_pass = QtWidgets.QLineEdit(self.centralwidget)
self.txt_pass.setGeometry(QtCore.QRect(320, 170, 113, 20))
self.btn_signin = QtWidgets.QPushButton("btn_signin\n`Fusion` style", self.centralwidget)
self.btn_signin.setGeometry(QtCore.QRect(320, 200, 113, 50))
MainWindow.setCentralWidget(self.centralwidget)
# <skipped>
self.btn_signin.clicked.connect(self.check_userPass)
# <skipped>
def check_userPass(self):
username = self.txt_user.text() #a QlineEdit
password = self.txt_pass.text() #a QlineEdit
if len(username) < 2 and len(password) < 2:
"""
# QtWidgets.QMessageBox.question(
QtWidgets.QMessageBox.information(
MainWindow, # - self , + MainWindow !!!
"Checkk",
"Helllooo `Ali reza`",
# QtWidgets.QMessageBox.Ok,
# QtWidgets.QMessageBox.Cancel
)
"""
# +++
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Information)
msg.setText("لطفا نام کاربری و رمزعبور خود را با دقت وارد نمایید")
msg.setInformativeText("This is additional information")
msg.setWindowTitle("MessageBox demo")
msg.setDetailedText("The details are as follows:")
msg.setStandardButtons(QtWidgets.QMessageBox.Ok ) #| QtWidgets.QMessageBox.Cancel)
msg.buttonClicked.connect(self.msgbtn)
retval = msg.exec_() # <<<---- !!!
print("value of pressed message box button:", retval)
# +++
def msgbtn(self, i):
print( "Button pressed is:",i.text() )
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion') # <<<--- convert app to FUSION style in win10
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
推荐阅读
- c - 有没有办法通过 AutoBench 比较 Haskell 和 C 函数?
- python - nltk 已经安装成功了,怎么还不能导入?
- regex - 正则表达式匹配没有斜杠的 URL,也没有文件扩展名
- php - php 开发服务器中 MODx 的友好 URL
- mongodb - Mongodb $project 根据值名称从数组中删除元素
- ios - 如何在自定义应用内键盘(Swift 4)中链接 XIB 按钮
- twilio - twilio 组合需要 15、20 分钟或更长时间的状态 Enqueued
- watch - 如何给 Consul 手表添加标签
- python - 我得到一个```AttributeError:'int'对象没有属性'cityArray'```
- ios - Swift 5 - 拦截所有选择器