2014-03-05 9 views
1

Я работаю над проектом, где у меня есть база данных, связанная с интерфейсом Python (я использую Qt Designer для дизайна). Я хочу иметь кнопку удаления из моего главного окна (QMainWindow), где, когда я нажав на нее, она открывает всплывающее (QDialog), который говоритPython Qt Как открыть всплывающее QDialog из QMainWindow

Are you sure you want to delete this item?

Но я понятия не имею, как это сделать.

Спасибо вам за помощь!

ответ

1
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) 

Связать эту функцию с событием нажатия кнопки.

+0

Я имею эту ошибку, когда я пишу сценарий: диалоговое = QtGui.QMessageBox.information (сам .tableViewPatient, «Удалить?», «Вы уверены, что хотите удалить этот элемент?», кнопки = QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) TypeError: аргументы не соответствуют перегруженному вызову: QMessageBox.information (QWidget, QString, QString, QMessageBox.StandardButtons buttons = QMessageBox.Ok, QMessageBox.StandardButton defaultButton = QMessageBox.NoButton): аргумент 1 неожиданно type 'PySide.QtGui.QTableView' Я думаю, это может быть ошибка от себя? (не уверен) Можете ли вы по-прежнему помогать мне в этом? – user3369214

1

Скажем, у вашего Qt Designer 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 functions, чтобы создать диалоговое окно. Первые три аргумента задают родительский элемент, заголовок и текст. Следующие два аргумента задают группу отображаемых кнопок плюс кнопку по умолчанию (тот, который изначально выделен). Если вы хотите использовать разные кнопки, доступные можно найти here.

Чтобы завершить пример, вам просто нужно немного кода, чтобы запустить приложение и открыть окно:

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = MainWindow() 
    window.show() 
    sys.exit(app.exec_()) 
+0

я получаю эту ошибку: TypeError: аргументы не соответствует ни перегруженный вызов: QMessageBox.question (QWidget, QString, QString, QMessageBox.StandardButtons кнопки = QMessageBox.Ok, QMessageBox.StandardButton DefaultButton = QMessageBox.NoButton): аргумент 1 имеет неожиданный тип «MyKinectViewer – user3369214

+0

@ user3369214. Мой примерный код правильный (я знаю, потому что я его протестировал). Первым аргументом 'QMessageBox.question' (который является' self' в моем примере) должен быть виджет Qt. Я подозреваю, что вы пытаетесь передать обычный объект python, поэтому вы получаете ошибку. Что такое класс MyKinectViewer? Не видя своего кода, трудно диагностировать проблему дальше. – ekhumoro

+0

Ну, MyKinectViewer - это QGLWidget ... можете ли вы помочь мне с этой информацией? : s Это виджет, который позволяет мне отображать видео Kinect 3D – user3369214