Как использовать "ScrollArea" в python PYQT - PullRequest
1 голос
/ 31 марта 2020

Я из другой страны, и я только изучаю английский sh, затем получаю его

Все сегодняшнее утро я пытался заставить код работать, я не знаю, что делать Моя цель - прокрутка Групповой ящик, в котором много-много кнопок

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'buttons.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(378, 368)
        buttons = []
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(120, 80, 141, 151))
        self.groupBox.setObjectName("groupBox")
        for i in range(1,30):
            buttons.append((QtWidgets.QPushButton(self.groupBox), QtWidgets.QPushButton(self.groupBox)))
            buttons[-1][0].setGeometry(QtCore.QRect(10, i*30, 90, 25))
            buttons[-1][0].setObjectName("group_{0}".format(i))
            buttons[-1][1].setGeometry(QtCore.QRect(100, i*30, 20, 25))
            buttons[-1][0].setObjectName("del_{0}".format(i))
        # Two next rows can be comment to show the groupBox
        scroll = QtWidgets.QScrollArea()
        scroll.setWidget(self.groupBox)


        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Имя группы"))

class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    app.exec_()

if __name__ == "__main__":
    main()

Пожалуйста, помогите мне. Я не знаю, что делать!

1 Ответ

0 голосов
/ 31 марта 2020

Это не будет работать в основном по следующим причинам:

  • scroll - локальная переменная, поэтому Python соберет мусор, как только вернется setupUi;
  • у него нет родительского набора, поэтому он не будет отображаться;

Кроме того, самое важное, вы должны НИКОГДА редактировать вывод pyui c по любой причине (даже если вы верите, что знаете, что делаете, но если бы знали, вы бы не редактировали его). Следуйте руководству по , используя Designer , чтобы понять, как правильно обращаться с этими файлами (которые должны использоваться только как импортированные модули).

Поскольку вы пытаетесь создать свой интерфейс с помощью кода, бесполезно иметь «объект Ui», просто делайте это в классе основного окна.
Я также предлагаю вам всегда стараться избегать фиксированных геометрий, но вместо этого используйте менеджеры компоновки.

class ExampleApp(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # if the scroll area is the only "main" widget of the window, use it
        # as the central widget
        scroll = QtWidgets.QScrollArea()
        self.setCentralWidget(scroll)

        self.groupBox = QtWidgets.QGroupBox()
        scroll.setWidget(self.groupBox)
        scroll.setWidgetResizable(True)

        # create a grid layout for the groupbox
        groupLayout = QtWidgets.QGridLayout(self.groupBox)

        # the above is the same as:
        # groupLayout = QtWidgets.QGridLayout()
        # self.groupBox.setLayout(groupLayout)


        for row in range(30):
            button1 = QtWidgets.QPushButton()
            button1.setFixedWidth(90)
            groupLayout.addWidget(button1, row, 0)
            button2 = QtWidgets.QPushButton()
            button2.setFixedWidth(20)
            groupLayout.addWidget(button2, row, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...