Мне нужно добавить в окно информацию о студентах (это похоже на таблицу). Это делается с помощью функции addStudentStats и добавляется к основному виджету. Я пытался сделать другую полосу прокрутки вставки виджета, и этот виджет вставил в основную. Но это не сработало. Затем я попытался сделать все окно прокручиваемым, но у меня тоже не получилось. Если бы кто-нибудь мог написать эти несколько строк кода (я думаю, что их немного, но не знаю, какие), я был бы доволен.
Прочтите здесь
Я добавил полосу прокрутки в свое окно. Программа заполняет его данными, которые идут вниз по экрану, но я не могу прокрутить
from PyQt5.QtWidgets import QPushButton, QWidget, QLabel,QScrollArea, QApplication, QMainWindow
from PyQt5.QtCore import Qt
import sys
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.uiMain = UIMainTeacher()
self.setUpUI(self)
def setUpUI(self, MainWindow):
MainWindow.setGeometry(50, 50, 400, 450)
MainWindow.setFixedSize(1800, 1000)
MainWindow.setWindowTitle("Login")
self.uiMain = UIMainTeacher()
self.gotoTeacher()
def gotoTeacher(self):
self.uiMain.setupUI(self, type)
self.show()
class UIMainTeacher(object):
def setupUI(self, MainWindow, userId):
MainWindow.setGeometry(50, 50, 400, 450)
MainWindow.setFixedSize(1800, 1000)
MainWindow.setWindowTitle("Main")
self.mainWindow = MainWindow
self.centralwid = QScrollArea(MainWindow)
self.centralwid.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.centralwidget = QWidget(self.centralwid)
self.exitButton = QPushButton("Exit", self.centralwid)
self.exitButton.move(1700, 0)
self.CourseLabel = QLabel("No Kourse yet", self.centralwid)
self.CourseLabel.move(900, 20)
self.AddCourseButton = QPushButton('Add Course', self.centralwid)
self.AddCourseButton.move(1700, 25)
self.CourseLabel = QLabel("Course", self.centralwidget)
self.CourseLabel.move(900, 20)
self.AddStudentsButton = QPushButton("Add Students", self.centralwid)
self.AddStudentsButton.move(1700, 100)
self.taskLabel = QLabel("TASKS:", self.centralwidget)
self.taskLabel.move(160, 20)
self.AddTaskButton = QPushButton('Add Task', self.centralwid)
self.AddTaskButton.move(1700, 50)
self.centralwid.setWidget(self.centralwidget)
MainWindow.setCentralWidget(self.centralwid)
x, y = 600, 0
for _ in range(200):
label = QLabel("Test Test", self.centralwid)
label.move(x, y)
y += 50
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
sys.exit(app.exec_())
[stackoverflow.com/users/6622587/eyllanesc] ОБНОВЛЕНО. Вы можете взглянуть на это?
используйте @eyllanesc
пожалуйста
с другой стороны, можно ли проверить ваш код? Ну, нет, я хочу скопировать его, вставить и выполнить, чтобы проверить вашу проблему, но я не могу, она полная? Нет, по тем же причинам, что и выше, прочтите ссылку, чтобы вы поняли, что важно для предоставления минимальный воспроизводимый пример
@eyllanesc Сделал это. должно работать
Вы можете показать изображение того, что вы хотите получить, сейчас я уже исправляю код, но это не означает, что это именно то, что вы хотите получить, поскольку не очень ясно, какой дизайн вы хотите.
Проблема проста. QScrollArea - это контейнер, который служит для отображения другого виджета большого размера, и этот виджет - это то, что вы передаете через метод setWidget()
. QScrollArea вычисляет необходимый размер, используя sizeHint()
виджета, поэтому в вашем случае проблема связана с этим виджетом, поскольку его sizeHint()
- это 0, 0
. Почему это 0, 0
? потому что внутри него ничего нет, поскольку метки являются дочерними для QScrollArea
, а не виджета, и даже если у него не было sizeHint()
, поскольку есть как минимум 2 способа их вычисления: макет дает вам эту информацию, но в вашем случае вы используете это, а второй - установить фиксированный размер для виджета, и это решение, которое я выбрал, я не знаю, что вы хотите, так как я не знаю, какой тип вывода вы хотите, но вы можете видеть что QScrollArea
виден.
class UIMainTeacher(object):
def setupUI(self, MainWindow):
MainWindow.setGeometry(50, 50, 400, 450)
MainWindow.setFixedSize(1800, 1000)
MainWindow.setWindowTitle("Main")
self.mainWindow = MainWindow
self.centralwid = QScrollArea(MainWindow)
self.centralwid.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.centralwidget = QWidget(self.centralwid)
self.exitButton = QPushButton("Exit", self.centralwid)
self.exitButton.move(1700, 0)
self.CourseLabel = QLabel("No Kourse yet", self.centralwid)
self.CourseLabel.move(900, 20)
self.AddCourseButton = QPushButton('Add Course', self.centralwid)
self.AddCourseButton.move(1700, 25)
self.CourseLabel = QLabel("Course", self.centralwidget)
self.CourseLabel.move(900, 20)
self.AddStudentsButton = QPushButton("Add Students", self.centralwid)
self.AddStudentsButton.move(1700, 100)
self.taskLabel = QLabel("TASKS:", self.centralwidget)
self.taskLabel.move(160, 20)
self.AddTaskButton = QPushButton('Add Task', self.centralwid)
self.AddTaskButton.move(1700, 50)
self.centralwid.setWidget(self.centralwidget)
MainWindow.setCentralWidget(self.centralwid)
x, y = 600, 0
for _ in range(200):
label = QLabel("Test Test", self.centralwidget)
label.move(x, y)
y += 50
self.centralwidget.setFixedWidth(800)
self.centralwidget.setFixedHeight(y)
поэтому, если вы собираетесь добавить больше элементов, вам придется рассчитать и установить setFixedHeight()
, другой вариант - использовать макеты, но поскольку я не знаю, какой дизайн вы ожидаете, я не смогу предоставить вам это второе решение.
предоставьте минимальный воспроизводимый пример, в вашем случае у вас слишком много кода, поэтому не торопитесь и устраняйте ненужное.