关于Pysid的查询

2024-03-29 06:52:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面提到的示例中,当我多次单击“视图”菜单下的“帮助”子菜单时,它会创建多个窗口。有人能告诉我怎么解决这个问题吗?你知道吗

import sys
from PySide import Qt Gui
from PySide.QtCore import Qt


class Window(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.menu_bar()

    def menu_bar(self):
        helpAction = QtGui.QAction('&Help', self)
        helpAction.setShortcut('Ctrl+H')
        helpAction.triggered.connect(self.add_helpWindow)
        menu = self.menuBar().addMenu('View')
        menu.addAction(helpAction)

    def add_helpWindow(self):
        window = QtGui.QMainWindow(self)
        window.setWindowTitle('New Window')
        window.show()

if __name__ == '__main__':

    import sys
    app=QtGui.QApplication.instance()      
    if not app:
        app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(300, 300)
    window.show()
    sys.exit(app.exec_())

Tags: fromimportselfappdefsys菜单window
1条回答
网友
1楼 · 发布于 2024-03-29 06:52:36

您的帮助窗口只是一个QMainWindow,它不是模态的,并且对可以存在的数量没有限制。因此,如果您多次选择“帮助”选项,就会得到多个窗口。你知道吗

您可能想使用一个^{},它有它的modal属性集。虽然没有什么强迫一次只存在一个对话框,但是模态意味着只要该窗口打开,用户就只能与该窗口交互。示例:

from Pyside.QtGui import QMessageBox

def add_helpWindow(self):
    help_dialog = QMessageBox.information(self, 'Help', 'Some Help Text Here')
    help_dialog.setModal(True)
    return help_dialog.exec_()

您还可以使用^{}获得更通用的对话框,它是QMessageBox的父类。你知道吗

如果这不是您想要的行为,那么您需要手动跟踪用户以前是否打开过该窗口,然后将用户关闭帮助窗口时发出的信号连接到重置存在跟踪器的插槽。下面是一个使用非模态QDialog的示例:

from Pyside.QtGui import QDialog    

class Window(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.menu_bar()

        self.help_open = False # Tracks if the help dialog is already open

    def help_closed(self):
        self.help_open = False

    ...

    def add_helpWindow(self):
        if not self.help_open:
            self.help_open = True
            help_dialog = QDialog(self)
            # Any other setup code here
            help_dialog.setModal(False)
            help_dialog.accepted.connect(self.help_closed)
            help_dialog.rejected.connect(self.help_closed)
            help_dialog.show()

相关问题 更多 >