Я знаю, что это было задано много раз раньше. Я прочитал все эти темы, и мое дело кажется другим. Все остальные, кто имеет это проблемы имеет несколько прямолинейные причины, которые я думаю, я исключил, такие как:Ошибка «QObject :: startTimer: QTimer может использоваться только с потоками, запущенными с QThread» много раз при закрытии приложения
- Начало таймер с не цикл обработки событий не работает
- Запуск/остановка таймера из потока, отличного тот, который создал таймер
- Если не установить родительское свойство виджета, что приводит к проблемам с порядком уничтожения
Ниже у меня есть минимальный пример кода, который демонстрирует проблему. Обратите внимание, что я не начал ни потоков, ни таймеров. Я также установил родительский элемент каждого виджета. Если я удалю виджеты графа, проблема исчезнет, поэтому возникает соблазн обвинять pyQtGraph, однако, если я включаю виджеты сюжета, но исключаю все пустые вкладки (т.е. каждую вкладку, кроме tabCatchaTiger), проблема также исчезает, и это кажется, оправдывает pyQtGraph.
Версии:
- Windows 7
- Python 2.7.8
- Wing IDE 5.0.9-1
- PyQt 4.11.1
- PyQwt 5.2.1
- PyQtGraph 0,9 .8
Испытание ca себе:
from PyQt4 import Qt, QtGui, QtCore
import PyQt4.Qwt5 as Qwt
import pyqtgraph as pg
pg.functions.USE_WEAVE = False # Lets pyqtgraph plot without gcc
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
# GUI for visualizing data from database
class crashyGUI(QtGui.QWidget) :
def __init__(self) :
# Make the window
QtGui.QWidget.__init__(self)
self.resize(700, QtGui.QDesktopWidget().screenGeometry(self).height()*.85)
self.setWindowTitle('Data Visualization')
# Create tab interface
tabWidget = QtGui.QTabWidget(self)
# define the tab objects
self.tabEeny = QtGui.QWidget(tabWidget)
self.tabMeeny = QtGui.QWidget(tabWidget)
self.tabMiney = QtGui.QWidget(tabWidget)
self.tabMoe = QtGui.QWidget(tabWidget)
self.tabCatchaTiger = QtGui.QWidget(tabWidget)
self.tabByThe = QtGui.QWidget(tabWidget)
self.tabToe = QtGui.QWidget(tabWidget)
# Initialize the tab objects
self.initTabCatchaTiger()
###########################################
############### Main Layout ###############
###########################################
tabWidget.addTab(self.tabEeny, 'Eeny')
tabWidget.addTab(self.tabMeeny, 'Meeny')
tabWidget.addTab(self.tabMiney, 'Miney')
tabWidget.addTab(self.tabMoe, 'Moe')
tabWidget.addTab(self.tabCatchaTiger, 'Catch a Tiger')
tabWidget.addTab(self.tabByThe, 'By The')
tabWidget.addTab(self.tabToe, 'Toe')
self.mainLayout = QtGui.QVBoxLayout(self)
self.mainLayout.addWidget(tabWidget)
self.setLayout(self.mainLayout)
def initTabCatchaTiger(self):
###########################################
############# ADC Capture Tab #############
###########################################
# define tab layout
grid = QtGui.QGridLayout(self.tabCatchaTiger)
# create copy of adc plot and add to row 3 of the grid
self.catchaTigerPlot1 = pg.PlotWidget(name = 'Catch a Tiger 1', parent = self.tabCatchaTiger)
self.catchaTigerPlot1.setTitle('Catch a Tiger 1')
grid.addWidget(self.catchaTigerPlot1, 2, 0, 1, 8)
self.catchaTigerPlot2 = pg.PlotWidget(name = 'Catch a Tiger 2', parent = self.tabCatchaTiger)
self.catchaTigerPlot2.setTitle('Catch a Tiger 2')
grid.addWidget(self.catchaTigerPlot2, 3, 0, 1, 8)
# set layout for tab
self.tabCatchaTiger.setLayout(grid)
def closeEvent(self, event) :
pass
def main() :
# open a QApplication and dialog() GUI
app = QtGui.QApplication([])
windowCrashy = crashyGUI()
windowCrashy.show()
app.exec_()
main()
Я не совсем понимаю ваше заключение. Проблема возникает, только если вкладка pyqtgraph присутствует, но не показана. Таким образом, похоже, что есть ошибка в инициализации виджета сюжета (я не буду говорить об ошибке, потому что это только извергает предупреждающие сообщения). – ekhumoro