簡體   English   中英

PyQt5將自定義QWidget添加到QLayout

[英]PyQt5 add custom QWidget to QLayout

目前,我正在嘗試將自定義QWidget類添加到QVBoxLayout。 我遇到的問題是該小部件根本沒有出現在布局中。 我什至嘗試設置QWidget的最小大小,因為我認為該窗口小部件沒有顯示,因為它的默認大小設置為零。

這是該類外觀的簡化:

class myWidget(QWidget):

    def __init__(self):
        super().__init__()

        # Slider
        self.mySlider = QSlider(Qt.Horizontal)
        self.mySlider.setRange(-360, 360)

        # LCD Screen
        self.lcd = QLCDNumber()
        self.lcd.setMinimumHeight(45)
        self.lcd.setMaximumHeight(75)

        # set Size
        self.setMinimumSize(QSize(400,300))

我刪除了滑塊和LCD屏幕之間的信號和插槽,因為這里我不擔心功能。 唯一的事實是,在以下代碼中,我直接在兩個按鈕之間得到了QSize(400,300)的灰色區域:

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        #Create Widgets to be Added to Central Widget
        self.w1 = QPushButton("First")
        self.w2 = myWidget()
        self.w3 = QPushButton("Third")

        #Set Central Widget and VBox
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        #Add widgets
        self.layout.addWidget(self.w1)
        self.layout.addWidget(self.w2)
        self.layout.addWidget(self.w3)

因此,我要做的只是創建3個小部件,並將它們放入中央小部件中的QVBoxLayout中。 2個按鈕小部件w1w3出現了,但是我的自定義小部件沒有出現,並且通過setMinimumSize增加小部件的大小僅在w1w3之間增加了灰色間距。

所以小部件在那里,由於某種原因它才不可見。 我對PyQt來說還很陌生,所以請解釋為什么會發生這種情況。

QWidgets只是其他小部件的容器。 沒有任何布局和子小部件的QWidget 看起來就像是空白空間,除非您要進行一些自定義繪制或樣式。

在您的示例中, 您實際上並沒有在自定義窗口小部件中添加任何子窗口小部件 為了將子小部件添加到另一個小部件,您需要設置子小部件的父部件,或者將子小部件添加到父小部件的布局中(該部件將自動重新父化該子小部件)

class myWidget(QWidget):

    def __init__(self):
        super().__init__()

        # Slider
        self.mySlider = QSlider(Qt.Horizontal)

在這里,您正在創建QSlider ,但實際上它不是MyWidget擁有的,它最終將由Qt擁有的,我希望它會在主窗口的左上角繪制。

為了使它成為MyWidget您需要設置父級並將其添加到布局中。

class myWidget(QWidget):

    def __init__(self):
        super().__init__()

        self.myLay = QVBoxLayout()
        self.setLayout(self.myLay)

        # Notice self is being passed in to set the parent
        self.mySlider = QSlider(Qt.Horizontal, self)

        # You need to add widgets to a layout to position them properly
        self.myLay.addWidget(self.mySlider)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM