PyQt5 - 让 QSpinBox 缩小,以便 QSlider 可以在 QHBoxLayout 中扩展? [复制]
Posted
技术标签:
【中文标题】PyQt5 - 让 QSpinBox 缩小,以便 QSlider 可以在 QHBoxLayout 中扩展? [复制]【英文标题】:PyQt5 - let QSpinBox shrink, so QSlider can expand, in a QHBoxLayout? [duplicate] 【发布时间】:2019-10-10 09:05:47 【问题描述】:我使用了下面发布的代码,它有一个 QHBoxLayout,里面有一个 QSlider 和 QSpinBox。不幸的是,我得到的是:
...也就是说,QSpinBox 占据了大部分宽度/水平空间,而 QSlider 被缩小/压缩到无法使用的程度。否则我希望这两个元素在程序启动时具有相同的宽度,并且在我拉伸窗口时它们会拉伸(它们确实会拉伸,但是,直到某个点:QSpinBox 保持其宽度,并且只有 QSlider 拉伸) .
那么,我怎样才能让这两个元素表现得如此,以便在启动时,它们中的每一个都占据 50%,即宽度的一半 - 并且随着窗口的缩放,它们保持该比例?
代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.slider_hbox = QHBoxLayout()
self.tslider = QSlider(Qt.Horizontal, self)
self.tslider.setFocusPolicy(Qt.StrongFocus)
self.tslider.setTickPosition(QSlider.TicksBothSides)
self.tslider.setTickInterval(10)
self.tslider.setSingleStep(1)
self.tslider.setMinimum(10)
self.tslider.setMaximum(100)
self.tslider.valueChanged.connect(self.on_tslider_change)
self.tspinbox = QSpinBox()
self.slider_hbox.addWidget(self.tslider, 1)
self.slider_hbox.addWidget(self.tspinbox, 1)
self.setLayout(self.slider_hbox)
self.setGeometry(300, 300, 220, 170)
self.setWindowTitle('Tester')
self.show()
@pyqtSlot()
def on_tslider_change(self):
print("on_tslider_change ".format(self.tslider.value()))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
【问题讨论】:
【参考方案1】:嗯,我想我找到了解决方案,感谢Ignore minimum size when resizing QWidget;只需添加一行:self.tspinbox.setMinimumSize(1,1)
,例如这里:
...
self.tslider.valueChanged.connect(self.on_tslider_change)
self.tspinbox = QSpinBox()
self.tspinbox.setMinimumSize(1,1)
self.slider_hbox.addWidget(self.tslider, 1)
...
【讨论】:
或app.setStyle("fusion")
或self.tslider.setSizePolicy(self.tspinbox.sizePolicy())
以上是关于PyQt5 - 让 QSpinBox 缩小,以便 QSlider 可以在 QHBoxLayout 中扩展? [复制]的主要内容,如果未能解决你的问题,请参考以下文章