PyQt-仅打开一个子窗口并将其与父窗口最小化

斯克林哈尔

这个想法是从父窗口菜单中打开一个子窗口,当我最小化父窗口时,也必须最小化子窗口,并且只能打开一个子窗口。我有在最小化父级时最小化子级的解决方案,但是我可以多次打开子级窗口(尽管已经打开了子级),并且我想禁用多个子级窗口的打开。

父窗口是MainWindow.py

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle('Parent window')
        self.flags = QtCore.Qt.Window
        self.ControlPanel = Control_panel_window()

        self.createActions()
        self.createMenus()

    def createActions(self):
        #    window - menu
        self.windowShowControlPanelAction = QtGui.QAction(self.tr("&Control panel"), self, statusTip='Control panel')        
        self.connect(self.windowShowControlPanelAction, QtCore.SIGNAL("triggered()"), self.ShowControlPanel)

    def createMenus(self):
        #    window
        self.windowMenu = QtGui.QMenu(self.tr("&Window"), self)
        self.windowMenu.addAction(self.windowShowControlPanelAction)
        self.menuBar().addMenu(self.windowMenu)

    def ShowControlPanel(self):
        self.ControlPanel = Control_panel_window(self)
        self.ControlPanel.setWindowFlags(QtCore.Qt.Window)
        self.ControlPanel.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    win.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
    win.show() 
    sys.exit(app.exec_())

子窗口是ChildWindow.py

class Control_panel_window(QWidget):
    def __init__(self, parent = None):
        super(Control_panel_window, self).__init__(parent)
        self.setFixedSize(200, 300)

    def setWindowFlags(self, flags):
        print "flags value in setWindowFlags"
        print flags
        super(Control_panel_window, self).setWindowFlags(flags)

问题是:如何设置仅打开一个子窗口?

巴库留

在您的ShowControlPanel功能中,每次触发信号时,您都将创建一个新的控制面板。既然您已经有可用的实例,为什么不使用它呢?

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle('Parent window')
        self.flags = QtCore.Qt.Window

        self.control_panel = ControlPanelWindow(self)
        self.control_panel.setWindowFlags(self.flags)

    #...

    def create_actions(self):
        self.show_control_panel_action = QtGui.QAction(
            self.tr("&Control panel"),
            self,
            statusTip='Control panel'
            )       
        self.show_control_panel_action.triggered.connect(self.show_control_panel)

    #...

    def show_control_panel(self):
        self.control_panel.show()

一些风格注释:

  • 尝试遵循PEP8 官方python编码样式指南。这包括CamelCase用于类,lowercase_with_underscore几乎用于其他所有东西。在这种情况下,由于Qt使用halfCamelCase的方法等,你可以用它太一致性。
  • 使用新型信号语法

    the_object.signal_name.connect(function)
    

    代替:

    self.connect(the_object, QtCore.SIGNAL('signal_name'), function)
    

    它不仅读起来更好,而且还提供了更好的调试信息。QtCore.SIGNAL如果信号不存在,使用,您将不会收到错误消息(例如,您写了like的错字trigered()而不是triggered())。在这种情况下,新样式的语法确实会引发异常,而您无需猜测为什么某些方法无法正常工作并在整个代码库中搜索拼写错误,便可以更早地纠正错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调整窗口大小时,PyQt5仅调整一个子窗口小部件的大小

来自分类Dev

如何从pyqt中的第一个窗口打开第二个窗口?

来自分类Dev

用链接打开一个子窗口?

来自分类Dev

PyQT5 当我们单击菜单栏的对象时,我们要打开一个新窗口

来自分类Dev

PyQT:如何打开新窗口

来自分类Dev

PyQt窗口打开后关闭

来自分类Dev

成功登录PyQt5 Python3后打开另一个窗口

来自分类Dev

PyQt:OSX中缺少对话框的最小化窗口按钮

来自分类Dev

PyQt:OSX中缺少对话框的“最小化窗口”按钮

来自分类Dev

PyQt5 MDI 子窗口作为一个类

来自分类Dev

PyQt-窗口位置

来自分类Dev

PyQt窗口构造

来自分类Dev

PyQt窗口未显示

来自分类Dev

PyQt:防止多次打开窗口

来自分类Dev

如何在 PyQt5 的主窗口中嵌入一个窗口

来自分类Dev

按下按钮时获取PyQt4打开另一个Qt窗口

来自分类Dev

PyQt关闭子窗口问题,无限循环?

来自分类Dev

如何初始化新的pyqt窗口?

来自分类Dev

PyQt窗口始终不响应

来自分类Dev

PyQt5弹出窗口

来自分类Dev

PyQt窗口在启动后关闭

来自分类Dev

PyQt窗口始终不响应

来自分类Dev

PyQt 窗口在启动后崩溃

来自分类Dev

关闭子窗口将父窗口最小化

来自分类Dev

如何将子窗口放入主窗口(PyQt)

来自分类Dev

pyqt5从父窗口关闭子窗口

来自分类Dev

从主窗口PyQt5的一个按钮弹出对话框

来自分类Dev

如何回调同一个窗口!?PYQT5

来自分类Dev

PyQt5 Focus QMainWindow 作为第一个窗口