В настоящее время пытается создать приложение PyQt5, которое включает в себя участок PyQtGraph
, Я уже делал это в своем доказательстве концепции и теперь пытаюсь его обновить.PyQt - PyQtGraph -> QWidget: должен построить QApplication перед QPaintDevice
Я использую GraphicsLayoutWidget
встраивать мой график в PyQt
Но у меня есть сообщение об ошибке:
QWidget: Необходимо построить QApplication перед QPaintDevice. Поэтому я читал об этом, и кажется, что моя QApplication не создана.
Но я не понимаю, у меня есть мой mainWindow
работает и я пытаюсь добавить GraphicsLayoutWidget
на кнопку Click события, так что я не понимаю, почему он не работает.
Этот образец РОС, который работает хорошо
if __name__ == "__main__":
# set default pyqtgraph color
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
global LeftPanelContent
LeftPanelContent = QtWidgets.QFrame()
LeftPanelContent.setMinimumSize(QtCore.QSize(200, 0))
LeftPanelContent.setMaximumSize(QtCore.QSize(200, 16777215))
LeftPanelContent.setObjectName("LeftPanelContent")
global PanelInfoPatient
PanelInfoPatient = QtWidgets.QFrame()
PanelInfoPatient.setMinimumSize(QtCore.QSize(250, 0))
PanelInfoPatient.setMaximumSize(QtCore.QSize(350, 16777215))
PanelInfoPatient.setObjectName("PanelInfoPatient")
#ui3 = Ui_MiddlePanel()
#ui3.setupUi(PanelInfoPatient)
ui3 = Ui_Form()
ui3.setupUi(PanelInfoPatient)
ui3.ButtonUpdate.clicked.connect(onUpdatePatientClicked)
ui3.ButtonDelete.clicked.connect(onDeletePatientClicked)
ui2 = Ui_LeftPanelContent()
ui2.setupUi(LeftPanelContent)
ui2.ButtonOrganisation.clicked.connect(showRightPanelCollapsible)
ui2.HideButton.clicked.connect(hideLeftPanels)
PanelRight = QtWidgets.QFrame()
PanelRight.setMinimumSize(QtCore.QSize(700, 0))
PanelRight.setObjectName("PanelRight")
ui4 = Ui_RightPanel()
ui4.setupUi(PanelRight)
ui4.widget_2 = pg.GraphicsLayoutWidget();
ui4.verticalLayout.addWidget(ui4.widget_2)
ui4.ButtonEvent.clicked.connect(onEventClicked);
ui4.ButtonDay.clicked.connect(onDayClicked);
ui4.ButtonWeek.clicked.connect(onWeekClicked);
ui4.ButtonMonth.clicked.connect(onMonthClicked);
ui4.widget_2.hide()
ui.gridLayout_2.addWidget(LeftPanelContent, 0, 0, 1, 1)
ui.gridLayout_2.addWidget(PanelInfoPatient, 0, 1, 1, 1)
ui.gridLayout_2.addWidget(PanelRight, 0, 2, 1, 1)
setMainWindowColor()
#MainWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint)
MainWindow.show()
sys.exit(app.exec_())
Теперь новая реализация:
Launcher.py:
def launchApp(app):
appController = ApplicationController()
appController.showMainWindow()
return app.exec_()
if __name__ == '__main__':
app = QtWidgets.QApplication([])
setLangage()
result = launchApp(app)
sys.exit(result)
The MainWindows Вид:
class MainWindow(QMainWindow, Ui_MainWindow, IMainWindows):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.LeftPanelContent = None
self.PanelInfoPatient = None
self.PanelRight = None
self.collaspedLeftPanel = None
self.leftPanelUi = None
self.panelInfoPatientUi = None
self.rightPanelUi = None
self.collaspedLeftPanelUi = None
self.dialog = None
self.lastDir = None
def guiAssemblage(self):
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
self.LeftPanelContent = QtWidgets.QFrame()
self.LeftPanelContent.setMinimumSize(QtCore.QSize(200, 0))
self.LeftPanelContent.setMaximumSize(QtCore.QSize(200, 16777215))
self.LeftPanelContent.setObjectName("LeftPanelContent")
self.PanelInfoPatient = QtWidgets.QFrame()
self.PanelInfoPatient.setMinimumSize(QtCore.QSize(250, 0))
self.PanelInfoPatient.setMaximumSize(QtCore.QSize(350, 16777215))
self.PanelInfoPatient.setObjectName("PanelInfoPatient")
self.PanelRight = QtWidgets.QFrame()
self.PanelRight.setMinimumSize(QtCore.QSize(700, 0))
self.PanelRight.setObjectName("PanelRight")
self.collaspedLeftPanel = QtWidgets.QFrame()
self.collaspedLeftPanel.setMinimumSize(QtCore.QSize(75, 0))
self.collaspedLeftPanel.setMaximumSize(QtCore.QSize(75, 16777215))
self.collaspedLeftPanel.setObjectName("collaspedLeftPanel")
self.leftPanelUi = Ui_LeftPanelContent()
self.leftPanelUi.setupUi(self.LeftPanelContent)
self.panelInfoPatientUi = Ui_Form()
self.panelInfoPatientUi.setupUi(self.PanelInfoPatient)
self.rightPanelUi = Ui_RightPanel()
self.rightPanelUi.setupUi(self.PanelRight)
self.collaspedLeftPanelUi = Ui_LeftPanelCollapsed()
self.collaspedLeftPanelUi.setupUi(self.collaspedLeftPanel)
self.gridLayout_2.addWidget(self.LeftPanelContent, 0, 0, 1, 1)
self.gridLayout_2.addWidget(self.PanelInfoPatient, 0, 1, 1, 1)
self.gridLayout_2.addWidget(self.PanelRight, 0, 2, 1, 1)
self.dialog = QDialog()
self.dialog.ui = Ui_popupDelete()
self.dialog.ui.setupUi(self.dialog)
self.dialog.setWindowTitle("Suppresion patient")
c ontrolleur:
class MainWindowController(object):
def __init__(self, appController):
self.appController = appController
self.model = None
self.view = None
def run(self):
self.view = MainWindow()
self.view.show()
self.view.guiAssemblage()
self.connectSignals()
def createPlot(self):
self.view.rightPanelUi.ContentRightPanel = pg.GraphicsLayoutWidget();
self.view.rightPanelUi.verticalLayout.addWidget(self.view.rightPanelUi.ContentRightPanel)
self.view.rightPanelUi.ContentRightPanel.hide()
def connectSignals(self):
self.view.leftPanelUi.HideButton.clicked.connect(self.onHideLeftPanelClicked)
self.view.panelInfoPatientUi.ButtonUpdate.clicked.connect(self.onUpdatePatientClicked)
self.view.panelInfoPatientUi.ButtonDelete.clicked.connect(self.onDeletePatientClicked)
self.view.rightPanelUi.ButtonEvent.clicked.connect(self.onEventClicked);
self.view.rightPanelUi.ButtonDay.clicked.connect(self.onDayClicked);
self.view.rightPanelUi.ButtonWeek.clicked.connect(self.onWeekClicked);
self.view.rightPanelUi.ButtonMonth.clicked.connect(self.onMonthClicked);
Я также попытался создать GraphicsLayoutWidget в методе guiAssemblage, но у меня такая же ошибка Пожалуйста, что я не хватает?
Pyqtgraph из github, вероятно, использовал Qt5 вместо Qt4. У меня было точно такое же сообщение, которое также было решено путем обновления с PyQt4 до PyQt5 (5.3.1). – ederag
Он может использовать Qt47 и выше. Он использует это: https://www.google.fr/search?q=pyqtgraph&ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&ei=mEfNV9ieGcyA8Qfx-IDAAw – PyNico
Право. Но pyqtgraph [ищет PySide, PyQt4 и PyQt5 в этом порядке] (https://github.com/pyqtgraph/pyqtgraph/blob/develop/pyqtgraph/Qt.py). Поскольку вы удалили PySide и PyQt4, * он эффективно использует PyQt5 *. Будет ли он работать, если вы переустановите PyQt4? PS: зачем публиковать Google-поиск вместо прямой ссылки? – ederag