PyQt4: добавление функциональности QtMessageBox.information в пользовательское окно

мне нужно что-то очень похожее на метод QtMessageBox.information, но мне нужно, чтобы он формировал мое собственное окно.

Мне нужно одно окно с несколькими метками, один QtTreeViewWidget, один QButtonGroup… Это окно будет вызываться из главного окна. Если мы вызовем класс, который реализует вызываемое окно как SelectionWindow, то мне нужно:

class MainWindow(QtGui.QMainWindow):
    ...
    def method2(self):
        selWin = SelectionWindow()
        tempSelectionValue = selWin.getSelection()
        # Blocked until return from getSelection
        self.method1(tempSelectionValue)
        ...

class SelectionWindow(QtGui.QMainWindow):
    ...
    def getSelection(self):
        ...
        return selectedRow
    ...

Метод getSelection из SelectionWindow должен открывать окно выбора и в конце возвращать строку, выбранную в QTreeViewWidget. Я хочу, чтобы главное окно оставалось заблокированным до тех пор, пока пользователь не выберет одну строку в окне выбора и не подтвердит ее кнопкой. Я надеюсь, что вы поймете, что мне нужно.

Буду признателен за любую помощь!

Спасибо, Тихо


person Tiho    schedule 25.02.2010    source источник


Ответы (1)


Я бы сделал что-то вроде этого:

  • диалоговое окно с кнопкой -> события, связанные со слотами accept() и reject() самого диалога
  • установите модальность диалога на что-то вроде модального приложения
  • вызовите метод диалогового окна exec_(), чтобы он блокировался, пока пользователь не выберет ok/cancel
  • после завершения выполнения метода exec_() вы можете прочитать то, что вам нужно, из диалоговых виджетов.

Что-то вроде этого должно соответствовать вашим потребностям:

class SelectionWindow(QtGui.QMainWindow):
    ...
    def getSelection(self):
        result = self.exec_()
        if result:
            # User clicked Ok - read currentRow
            selectedRow = self.ui.myQtTreeViewWidget.currentIndex()
        else:
            # User clicked Cancel
            selectedRow = None
        return selectedRow
    ...
person redShadow    schedule 02.03.2010
comment
redShadow, большое спасибо за ответ. В конце я сделал что-то очень похожее на ваше предложение. - person Tiho; 09.03.2010