[英]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個按鈕小部件w1
和w3
出現了,但是我的自定義小部件沒有出現,並且通過setMinimumSize
增加小部件的大小僅在w1
和w3
之間增加了灰色間距。
所以小部件在那里,由於某種原因它才不可見。 我對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.