2015-11-09 3 views
0

В настоящее время пытается создать приложение 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, но у меня такая же ошибка Пожалуйста, что я не хватает?

ответ

2

Так что я решил свою проблему.

мой pyqtgraph не был в курсе. Не используйте пакет PyPy, это не актуально. Я обновил numpy, а затем загрузил и заменил мой модуль pyqtgraph источниками GitHub.

я также удалил PyQt5/PyQt4 и PySide с моего компьютера затем переустановить PyQt5

я пытался несколько решения до этого стека:

C:\Users\Nicolas\Desktop\GitRepository\e-servicing\src (master) 
λ pip install --upgrade pyqtgraph 
Requirement already up-to-date: pyqtgraph in c:\python34\lib\site-packages 
Requirement already up-to-date: numpy in c:\python34\lib\site-packages (from pyqtgraph) 

C:\Users\Nicolas\Desktop\GitRepository\e-servicing\src (master) 
λ python launcher.py 
Traceback (most recent call last): 
File "C:\Python34\lib\site-packages\pyqtgraph\Qt.py", line 25, in <module> 
import PyQt4 
ImportError: No module named 'PyQt4' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "C:\Python34\lib\site-packages\pyqtgraph\Qt.py", line 29, in <module> 
import PySide 
ImportError: No module named 'PySide' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "launcher.py", line 9, in <module> 
    import pyqtgraph as pg; 
    File "C:\Python34\lib\site-packages\pyqtgraph\__init__.py", line 13, in <module> 
from .Qt import QtGui 
File "C:\Python34\lib\site-packages\pyqtgraph\Qt.py", line 32, in <module> 
raise Exception("PyQtGraph requires either PyQt4 or PySide; neither package could be imported.") 
Exception: PyQtGraph requires either PyQt4 or PySide; neither package could be imported. 

просто получить источник PyQtGraph из GitHub Он работал.

+0

Pyqtgraph из github, вероятно, использовал Qt5 вместо Qt4. У меня было точно такое же сообщение, которое также было решено путем обновления с PyQt4 до PyQt5 (5.3.1). – ederag

+0

Он может использовать 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

+0

Право. Но pyqtgraph [ищет PySide, PyQt4 и PyQt5 в этом порядке] (https://github.com/pyqtgraph/pyqtgraph/blob/develop/pyqtgraph/Qt.py). Поскольку вы удалили PySide и PyQt4, * он эффективно использует PyQt5 *. Будет ли он работать, если вы переустановите PyQt4? PS: зачем публиковать Google-поиск вместо прямой ссылки? – ederag

Смежные вопросы