Для проекта в классе программирования нам нужно разработать приложение и использовать PYQT5 для GUI.
У меня есть класс, основанный на QMainWindow. Есть несколько строк кода, которые я не совсем понимаю. Ниже приведена инициализация:
# Snippet 1
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
# self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle("Main Window")
Затем определяются следующие переменные / элементы GUI:
# Snippet 2
self.main_widget = QtWidgets.QWidget(self)
l = QtWidgets.QVBoxLayout(self.main_widget)
sc = MyStaticMplCanvas(width=5, height=4, dpi=100) # just some graph
dc = MyDynamicMplCanvas(width=5, height=4, dpi=100) # another graph
l.addWidget(sc)
l.addWidget(dc)
Затем я попытался добавить горизонтальный макет со следующим содержанием:
# Snippet 3
x = QtWidgets.QHBoxLayout(self.main_widget) # new
b1 = QtWidgets.QPushButton("Test1") # new
b2 = QtWidgets.QPushButton("Test2") # new
x.addWidget(p1) # new
x.addWidget(p2) # new
Наконец, генерируется центральный виджет:
# Snippet 4
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)
Сама программа не выдает ошибок и работает правильно. Но только два графика из фрагмента 2 отображаются в окне. Если вы удалите
self.main_widget
от
l = QtWidgets.QVBoxLayout(self.main_widget)
и оставьте скобки пустыми, отображаются только кнопки в фрагменте 3.
Какой смысл стоит за следующим заданием?
self.main_widget = QtWidgets.QWidget(self)
Можете ли вы объединить вертикальное и горизонтальное расположение блоков в один и, следовательно, отобразить две кнопки, а также два графика в качестве центрального виджета?
Это был мой первоначальный план, и я попробовал кое-что с опциями addLayout () и setLayout () и хотел добавить эти макеты в setCentralWidget (), но безуспешно.
Есть ли у вас идея о том, как отобразить комбинацию макетов с несколькими ячейками в качестве центрального виджета в классе, основанном на QMainWindow?
Большое спасибо. :)