在 pyqt5 的继承窗口上创建新组件

Posted

技术标签:

【中文标题】在 pyqt5 的继承窗口上创建新组件【英文标题】:Create new components on an inherited window in pyqt5 【发布时间】:2019-08-29 18:37:46 【问题描述】:

我正在开发一个用 PYQT5 制作的小型 GUI。我有一个带有几个按钮的主窗口,它们可以打开新窗口。其中一个窗口有一个嵌入式 matplotlib 图和 2 个按钮。

所以,从这个名为“PlotWindow”的现有窗口中,我想创建一个名为“DynamicPlotWindow”的新窗口,但要添加更多元素(组合框、按钮、方法等)。换句话说,我想重用现有的窗口并在它们上面放置更多的组件。我能够创建新的 DynamicPlotWindow 窗口,但添加到其中的新组件不可见。

基于这个问题:PyQt5 Making a subclass widgets 两个类的定义如下:

class PlotWindow(QMainWindow): #Matplotlib embeded + 2 buttons


        def __init__(self, parent):
            super(QMainWindow, self).__init__(parent)
            self.width = 1000
            self.height = 540
            self.setGeometry(10, 10, self.width, self.height)
            ...
            self.show()

        ...

    class DynamicPlotWindow(PlotWindow):

        def __init__(self, parent):
            super(PlotWindow, self).__init__(parent)
            self.btn = QPushButton("Test") # -> Not visible
            self.btn.resize(120,30)
            self.btn.move(600,800)
            ...
            self.show()

我的问题是我在这里做错了什么?有可能做到吗? 最好的,

【问题讨论】:

【参考方案1】:

您的代码有以下错误:

按钮不是窗口的子窗口,因此不会显示,解决方案是将其作为父窗口传递给自身 窗口大小为 1000x540,但您想将按钮放置在明显超出高度的位置 (600,800):800> 540。

解决办法是:

self.btn = QPushButton("Test", self) 
self.btn.resize(120,30)
self.btn.move(600, 200) # change y coordinate

【讨论】:

像魅力一样工作!非常感谢你!大师!

以上是关于在 pyqt5 的继承窗口上创建新组件的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5,单击按钮后如何打开新窗口

第一个PyQt5窗口

pyqt5-基本窗口控件

在子 multiprocessing.Process (Python3) 中打开 PyQt5 窗口

PyQt5 窗口间切换

PyQt5快速入门PyQt5高级窗口组件