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 中扩展? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5学习之QSpinBox

七PyQT5控件——QSlider,QSpinBox

当我按下 QSpinbox 中的箭头时,如何防止双 valueChanged 事件?

PyQt5 基本语法:输入控件

cssfixed缩小自动偏移

活动期间 GUI 没有变化? (Python3.6,PyQt5)