我正在从事一个项目,其中我有一个与Python接口链接的数据库(我使用Qt设计器进行设计)。我希望主窗口(QMainWindow
)中有一个删除按钮,当我按下它时,它会打开一个弹出(QDialog
),上面写着
您确定要删除此项目吗?
但我不知道该怎么做。
谢谢你的帮助!
发布于 2014-03-05 10:47:44
def button_click():
dialog = QtGui.QMessageBox.information(self, 'Delete?', 'Are you sure you want to delete this item?', buttons = QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel)
将此函数绑定到单击事件按钮。
发布于 2014-03-05 12:35:45
假设Qt设计器ui有一个名为"MainWindow“的主窗口和一个名为"buttonDelete”的按钮。
第一步是设置主窗口类,并将按钮的单击信号连接到处理程序:
from PyQt4 import QtCore, QtGui
from mainwindow_ui import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self.buttonDelete.clicked.connect(self.handleButtonDelete)
接下来,需要向处理信号并打开对话框的MainWindow
类添加一个方法:
def handleButtonDelete(self):
answer = QtGui.QMessageBox.question(
self, 'Delete Item', 'Are you sure you want to delete this item?',
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No |
QtGui.QMessageBox.Cancel,
QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.Yes:
# code to delete the item
print('Yes')
elif answer == QtGui.QMessageBox.No:
# code to carry on without deleting
print('No')
else:
# code to abort the whole operation
print('Cancel')
这使用一个内置的QMessageBox函数来创建对话框。前三个参数设置父、标题和文本。下面两个参数设置显示的按钮组,加上默认按钮(最初突出显示的按钮)。如果您想使用不同的按钮,可用的按钮可以找到这里。
要完成该示例,只需编写一些代码即可启动应用程序并显示窗口:
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
发布于 2018-04-22 21:30:45
对于qt5.6,我也得到了相同的错误
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'
因此,我在下面的代码中将self
更改为None
,它可以工作。
def handleButtonDelete(self):
answer = QtGui.QMessageBox.question(
None, 'Delete Item', 'Are you sure you want to delete this item?',
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No |
QtGui.QMessageBox.Cancel,
QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.Yes:
# code to delete the item
print('Yes')
elif answer == QtGui.QMessageBox.No:
# code to carry on without deleting
print('No')
else:
# code to abort the whole operation
print('Cancel')
https://stackoverflow.com/questions/22206472
复制相似问题