设置最初移动的滚动区域 [英] Set scroll area initially moved

查看:54
本文介绍了设置最初移动的滚动区域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在滚动区域内创建一个大小部件,并最初将两个滑块设置在栏的中间.滚动条不起作用,我认为小部件没有很好地连接.雷:

I need to create a big widget inside a scroll area and initially set both sliders in the middle of the bar. The scroll bar does not work, the widgets are not well connected I think. MRE:

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget
import sys


class Diedrico(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
    # Draws stuff


class UiVentana(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(UiVentana, self).__init__(parent)
        ventana.resize(1500, 1015)
        ventana.setFixedSize(1500, 1015)
        self.widget_central = QtWidgets.QWidget(ventana)

        scrol = QtWidgets.QScrollArea(self.widget_central)
        scrol.setWidgetResizable(True)
        scrol.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scrol.setGeometry(QtCore.QRect(1010, 510, 470, 460))

        self.Diedrico = Diedrico(scrol)
        self.Diedrico.setGeometry(QtCore.QRect(0, 0, 1000, 1000))
        # This widget should be big enough to use the scroll bar, but it does not work

        ventana.setCentralWidget(self.widget_central)
        ventana.show()


if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    ventana = QtWidgets.QMainWindow()
    ui = UiVentana()
    sys.exit(app.exec_())

推荐答案

看来问题出在 scrol.setWidgetResizable(True) 上,好像是调整了内容的大小...设置为False 对我有用.

It seems that the problem comes from scrol.setWidgetResizable(True), which seems to resize the content... setting this to False worked for me.

此外,要使滚动条居中,有几个选项,例如设置 verticalScrollBar 或使用 ensureVisible(x, y).

Also, to center the scrollbar, there are a few options, like setting the value of the verticalScrollBar or using ensureVisible(x, y).

一个可行的解决方案:

from PyQt5 import QtCore, QtWidgets
import sys

class UiVentana(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(UiVentana, self).__init__(parent)
        self.setupUi()

        self.label.setGeometry(QtCore.QRect(10, 0, 282, 331))
        self.label.setText("this is a long text\n" * 100)

        self.scrollArea.verticalScrollBar().setValue(300)

    def setupUi(self):
        self.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(self)

        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(470, 330, 301, 211))
        self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scrollArea.setWidgetResizable(False)

        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 282, 10000))

        self.label = QtWidgets.QLabel(self.scrollAreaWidgetContents)

        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.setCentralWidget(self.centralwidget)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ui = UiVentana()
    ui.show()
    sys.exit(app.exec_())

这篇关于设置最初移动的滚动区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆