Как подключить ScrollBar к Label из PyQt5?
Как подключить ScrollBar к Label из PyQt5 так, чтобы я двигал скролл, а лабел с большим текстом двигался в направлении скролл бара?
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setStyleSheet("background-color: #fff;")
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(230, 10, 441, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit.setFont(font)
self.lineEdit.setStyleSheet(" ")
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(660, 10, 111, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("")
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 211, 51))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap(""))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(20, 80, 761, 501))
font = QtGui.QFont()
font.setPointSize(11)
self.label_2.setFont(font)
self.label_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.label_2.setMouseTracking(True)
self.label_2.setTabletTracking(False)
self.label_2.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.label_2.setStyleSheet("")
self.label_2.setText("")
self.label_2.setTextFormat(QtCore.Qt.PlainText)
self.label_2.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.label_2.setWordWrap(True)
self.label_2.setObjectName("label_2")
self.verticalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
self.verticalScrollBar.setGeometry(QtCore.QRect(750, 90, 21, 481))
self.verticalScrollBar.setStyleSheet("")
self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
self.verticalScrollBar.setObjectName("verticalScrollBar")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Искать!"))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Класс
QScrollAreaобеспечивает просмотр с прокруткой на другой виджет.Область прокрутки используется для отображения содержимого дочернего виджета во фрейме. Если виджет превышает размер фрейма, в представлении могут быть полосы прокрутки, чтобы можно было просматривать всю область дочернего виджета. Дочерний виджет должен быть указан с помощью
setWidget().
Больше https://doc.qt.io/qt-5/qscrollarea.html#details
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(784, 543)
MainWindow.setStyleSheet("/* VERTICAL SCROLLBAR */\n"
" QScrollBar:vertical {\n"
" border: none;\n"
" background: rgb(45, 45, 68);\n"
" width: 14px;\n"
" margin: 15px 0 15px 0;\n"
" border-radius: 0px;\n"
" }\n"
"\n"
"/* HANDLE BAR VERTICAL */\n"
"QScrollBar::handle:vertical { \n"
" background-color: rgb(80, 80, 122);\n"
" min-height: 30px;\n"
" border-radius: 7px;\n"
"}\n"
"QScrollBar::handle:vertical:hover{ \n"
" background-color: rgb(255, 0, 127);\n"
"}\n"
"QScrollBar::handle:vertical:pressed { \n"
" background-color: rgb(185, 0, 92);\n"
"}\n"
"\n"
"/* BTN TOP - SCROLLBAR */\n"
"QScrollBar::sub-line:vertical {\n"
" border: none;\n"
" background-color: rgb(59, 59, 90);\n"
" height: 15px;\n"
" border-top-left-radius: 7px;\n"
" border-top-right-radius: 7px;\n"
" subcontrol-position: top;\n"
" subcontrol-origin: margin;\n"
"}\n"
"QScrollBar::sub-line:vertical:hover { \n"
" background-color: rgb(255, 0, 127);\n"
"}\n"
"QScrollBar::sub-line:vertical:pressed { \n"
" background-color: rgb(185, 0, 92);\n"
"}\n"
"\n"
"/* BTN BOTTOM - SCROLLBAR */\n"
"QScrollBar::add-line:vertical {\n"
" border: none;\n"
" background-color: rgb(59, 59, 90);\n"
" height: 15px;\n"
" border-bottom-left-radius: 7px;\n"
" border-bottom-right-radius: 7px;\n"
" subcontrol-position: bottom;\n"
" subcontrol-origin: margin;\n"
"}\n"
"QScrollBar::add-line:vertical:hover { \n"
" background-color: rgb(255, 0, 127);\n"
"}\n"
"QScrollBar::add-line:vertical:pressed { \n"
" background-color: rgb(185, 0, 92);\n"
"}\n"
"\n"
"/* RESET ARROW */\n"
"QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {\n"
" background: none;\n"
"}\n"
"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\n"
" background: none;\n"
"}\n"
"\n"
"\n"
"\n"
"/* HORIZONTAL SCROLLBAR - HOMEWORK */\n"
"QScrollBar:horizontal {\n"
" \n"
"}\n"
"QScrollBar::handle:horizontal {\n"
" \n"
"}\n"
"QScrollBar::add-line:horizontal {\n"
" \n"
"}\n"
"QScrollBar::sub-line:horizontal {\n"
" \n"
"}\n"
"QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal\n"
"{\n"
"\n"
"}\n"
"QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal\n"
"{\n"
"\n"
"}\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setStyleSheet("background-color: rgb(45, 45, 68);")
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.lineEdit = QtWidgets.QLineEdit('QLineEdit', self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(230, 10, 441, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.lineEdit.setFont(font)
self.lineEdit.setStyleSheet(" ")
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(660, 10, 111, 41))
font = QtGui.QFont()
font.setPointSize(16)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("")
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 211, 51))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap("boy.jpg").scaled(211, 51))
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.horizontalLayout.addWidget(self.lineEdit)
self.horizontalLayout.addWidget(self.pushButton)
self.verticalLayout.addLayout(self.horizontalLayout)
self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
self.scrollArea.setStyleSheet(" QScrollBar:vertical {\n"
" border: none;\n"
" background: rgb(56, 56, 85);\n"
" }")
self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(-319, 0, 1218, 1218))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_2 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.label_2.setGeometry(QtCore.QRect(20, 80, 761, 501))
font = QtGui.QFont()
font.setPointSize(11)
self.label_2.setFont(font)
self.label_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.label_2.setMouseTracking(True)
self.label_2.setTabletTracking(False)
self.label_2.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.label_2.setStyleSheet("")
self.label_2.setText("label_2")
# ? self.label_2.setTextFormat(QtCore.Qt.PlainText)
self.label_2.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.label_2.setWordWrap(True)
self.label_2.setObjectName("label_2")
self.verticalLayout_2.addWidget(self.label_2)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.verticalLayout.addWidget(self.scrollArea)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 784, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Искать!"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.label_2.setText(
'<h1 style="color:white; font-size: 33px;">Welcome to PyQt5~</h1><br>'+
'<b style="color:white; font-size: 15px;">Как подключить ScrollBar '
'к Label из PyQt5 так чтобы я двигал скролл а лабел с большим '
'текстом двигался в направлении скролл бара?</b><br>' * 20
)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

