How do you put a schedule in QFrame?
-
How to make the schedule set up clear.
QFrame
(sighs)insert_frame
"?A new window is being created, ignoring the shape of the form created by the Qt Designer♪
How to make the schedule fit into the existing element.
insert_frame
"?ui_example.py:
#from ui_example import Ui_DialogWindowAccept import sys import matplotlib matplotlib.use('agg') from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure import random
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_DialogWindowAccept(object):
def setupUi(self, DialogWindowAccept):
DialogWindowAccept.setObjectName("DialogWindowAccept")
DialogWindowAccept.resize(620, 520)
DialogWindowAccept.setMinimumSize(QtCore.QSize(0, 0))
DialogWindowAccept.setMaximumSize(QtCore.QSize(16000, 16000))
self.centralwidget = QtWidgets.QWidget(DialogWindowAccept)
self.centralwidget.setMaximumSize(QtCore.QSize(16000, 16000))
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout")
self.header = QtWidgets.QFrame(self.centralwidget)
self.header.setMinimumSize(QtCore.QSize(0, 70))
self.header.setMaximumSize(QtCore.QSize(16777215, 70))
self.header.setStyleSheet("")
self.header.setFrameShape(QtWidgets.QFrame.NoFrame)
self.header.setFrameShadow(QtWidgets.QFrame.Raised)
self.header.setObjectName("header")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.header)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.header)
self.label.setStyleSheet("")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.verticalLayout.addWidget(self.header)
self.insert_frame = QtWidgets.QFrame(self.centralwidget)
self.insert_frame.setMinimumSize(QtCore.QSize(600, 310))
self.insert_frame.setFrameShape(QtWidgets.QFrame.NoFrame)
self.insert_frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.insert_frame.setObjectName("insert_frame")
self.verticalLayout.addWidget(self.insert_frame)
DialogWindowAccept.setCentralWidget(self.centralwidget)self.retranslateUi(DialogWindowAccept) QtCore.QMetaObject.connectSlotsByName(DialogWindowAccept) def retranslateUi(self, DialogWindowAccept): _translate = QtCore.QCoreApplication.translate DialogWindowAccept.setWindowTitle(_translate("DialogWindowAccept", "MainWindow")) self.label.setText(_translate("DialogWindowAccept", "Example"))
main.py:
class MplCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100): fig = Figure(figsize=(width, height), dpi=dpi) self.axes = fig.add_subplot(111) super(MplCanvas, self).__init__(fig)
class GraphWindow(QtWidgets.QMainWindow):
def __init__(self): QtWidgets.QMainWindow.__init__(self) self.ui = Ui_DialogWindowAccept() self.ui.setupUi(self) self.setWindowModality(QtCore.Qt.ApplicationModal) self.canvas = MplCanvas(self, width=5, height=4, dpi=100) self.setCentralWidget(self.canvas) n_data = 50 self.xdata = list(range(n_data)) self.ydata = [random.randint(0, 10) for i in range(n_data)] GraphWindow.update_plot(self) self.show() def update_plot(self): self.ydata = self.ydata[1:] + [random.randint(0, 10)] self.canvas.axes.cla() self.canvas.axes.plot(self.xdata, self.ydata, 'r') self.canvas.draw()
Introduce a minimum reproduced example.
Structure in Qt Designer:
DialogWindowAccept->centralwidget->header(->label), insert_frame
-
No, you're not creating a new window, ignoring the shape created in Qt Designer, You're setting a view.
canvas
It's like a central view of the main window.self.setCentralWidget(self.canvas)
And so you all lost what you created in Qt Designer.
Yeah, you can put in a Qt Designer any kind of thing. @ PITONISTversion3-8 refers to my answer, where I told you how to do it.
In your case, also, it's possible to just set up a manager of the company.
hlayout = QtWidgets.QHBoxLayout(self.insert_frame)
and add a view
hlayout.addWidget(self.canvas)
import sys import random from PyQt5 import QtCore, QtGui, QtWidgets import matplotlib from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure
class Ui_DialogWindowAccept(object):
def setupUi(self, DialogWindowAccept):
DialogWindowAccept.setObjectName("DialogWindowAccept")
DialogWindowAccept.resize(620, 520)
DialogWindowAccept.setMinimumSize(QtCore.QSize(0, 0))
DialogWindowAccept.setMaximumSize(QtCore.QSize(16000, 16000))
self.centralwidget = QtWidgets.QWidget(DialogWindowAccept)
self.centralwidget.setMaximumSize(QtCore.QSize(16000, 16000))
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout")
self.header = QtWidgets.QFrame(self.centralwidget)
self.header.setMinimumSize(QtCore.QSize(0, 70))
self.header.setMaximumSize(QtCore.QSize(16777215, 70))
self.header.setStyleSheet("")
self.header.setFrameShape(QtWidgets.QFrame.NoFrame)
self.header.setFrameShadow(QtWidgets.QFrame.Raised)
self.header.setObjectName("header")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.header)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.header)
self.label.setStyleSheet("")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.verticalLayout.addWidget(self.header)
self.insert_frame = QtWidgets.QFrame(self.centralwidget)
self.insert_frame.setMinimumSize(QtCore.QSize(600, 310))
self.insert_frame.setFrameShape(QtWidgets.QFrame.NoFrame)
self.insert_frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.insert_frame.setObjectName("insert_frame")
self.verticalLayout.addWidget(self.insert_frame)
DialogWindowAccept.setCentralWidget(self.centralwidget)self.retranslateUi(DialogWindowAccept) QtCore.QMetaObject.connectSlotsByName(DialogWindowAccept) def retranslateUi(self, DialogWindowAccept): _translate = QtCore.QCoreApplication.translate DialogWindowAccept.setWindowTitle(_translate("DialogWindowAccept", "MainWindow")) self.label.setText(_translate("DialogWindowAccept", "Example"))
class MplCanvas(FigureCanvas):
def init(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(MplCanvas, self).init(fig)class GraphWindow(QtWidgets.QMainWindow, Ui_DialogWindowAccept):
def init(self):
super().init()
self.setupUi(self)??? self.setWindowModality(QtCore.Qt.ApplicationModal)
self.canvas = MplCanvas(self, width=5, height=4, dpi=100) hlayout = QtWidgets.QHBoxLayout(self.insert_frame) # +++ hlayout.addWidget(self.canvas) # +++ n_data = 50 self.xdata = list(range(n_data)) self.ydata = [random.randint(0, 10) for i in range(n_data)] self.update_plot() def update_plot(self): self.ydata = self.ydata[1:] + [random.randint(0, 10)] self.canvas.axes.cla() self.canvas.axes.plot(self.xdata, self.ydata, 'r') self.canvas.draw()
if name == 'main':
app = QtWidgets.QApplication(sys.argv)
ex = GraphWindow()
ex.show()
sys.exit(app.exec())