在PyQt环境中,如何将两个滚动条(垂直和水平)设置为同一个小部件?

2024-06-02 20:01:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为一个QGroupBox制作两个滚动条,但我只成功地拥有了一个(垂直的) 我不知道我需要做什么。在

下面是我的代码的一个简短示例:

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys


class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()
        self.parent = parent

        self.centralTabs= QTabWidget()
        self.setCentralWidget(self.centralTabs)
        self.setFixedWidth(200)
        self.setFixedHeight(200)

        #tab Model selection
        self.tab_ModelSelect = QWidget()
        self.centralTabs.addTab(self.tab_ModelSelect,"Label")


        self.groupscrolllayouttest = QHBoxLayout()  
        self.groupscrollbartest = QGroupBox()  


        self.mainHBOX_param_scene = QVBoxLayout()
        for i in range(10):
            Label = QLabel('BlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBlaBla')
            Label.setFixedWidth(200)
            self.mainHBOX_param_scene.addWidget(Label)


        #
        scroll = QScrollArea()
        scroll.setWidget(self.groupscrollbartest)
        scroll.setWidgetResizable(True)
        scroll.setFixedWidth(20)
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) 
        self.groupscrollbartest.setLayout(self.mainHBOX_param_scene)
        self.groupscrolllayouttest.addWidget(self.groupscrollbartest)
        self.groupscrolllayouttest.addWidget(scroll)


        self.tab_ModelSelect.setLayout(self.groupscrolllayouttest)

def main():
    app = QApplication(sys.argv)
    ex = SurfViewer(app)
    ex.setWindowTitle('window')
    # ex.showMaximized()
    ex.show()
    sys.exit(app.exec_( ))


if __name__ == '__main__':
    main()

结果如下:

enter image description here

在我更复杂的代码中,我使用了QTabWidget,这就是为什么我在这个示例中包含它。我想做的是在底部有一个水平滚动条,允许我左右移动文本。显然,我想让另一个来上下移动文本。在

我还尝试在第一个滚动条上添加第二个滚动条(groupscrolllayouttest)

^{pr2}$

但最后我得到了一个奇怪的滚动条:

enter image description here

所以现在我被卡住了。有什么想法吗?在


Tags: fromimportselfsystablabelpyqt5ex
1条回答
网友
1楼 · 发布于 2024-06-02 20:01:51

您需要做的是创建一个小部件,并在该小部件中放置QGroupBox:

[...]
scroll = QScrollArea()
widget = QWidget(self)
widget.setLayout(QVBoxLayout())
widget.layout().addWidget(self.groupscrollbartest)
scroll.setWidget(widget)
scroll.setWidgetResizable(True)
self.groupscrollbartest.setLayout(self.mainHBOX_param_scene)
self.groupscrolllayouttest.addWidget(scroll)

self.tab_ModelSelect.setLayout(self.groupscrolllayouttest)
[...]

输出:

enter image description here

相关问题 更多 >