我想创建一个QApplication,然后使用键盘快捷键退出它。然后,python脚本应调用另一个QApplication。
我目前的问题是,当第二个QApplication将要运行时,我收到此错误:
app2 = QApplication() RuntimeError: Please destroy the QApplication singleton before creating a new QApplication instance.
我具有以下结构:
| main.py | Q1.py | Q2.py
这是main.py:
import Q1 as record import Q2 as display def main(): record.main() display.main() if __name__ == "__main__": main()
这是Q1,这会造成问题:
import sys from PySide2 import QtWidgets as qtw from PySide2 import QtGui as qtg from PySide2 import QtCore as qtc from PySide2 import QtMultimedia as qtmm class MainWindow(qtw.QMainWindow): def __init__(self): super().__init__() #Create Window layout with a sound widget soundboard = qtw.QWidget() soundboard.setLayout(qtw.QGridLayout()) self.setCentralWidget(soundboard) sw = SoundWidget() soundboard.layout().addWidget(sw) #Window Dimensions self.setSizePolicy(qtw.QSizePolicy.Expanding, qtw.QSizePolicy.MinimumExpanding) # Code ends here self.show() class SendOrderButton(qtw.QPushButton): button_stylesheet = 'background-color: blue; color: white;' def __init__(self): super().__init__('Send Order') self.setSizePolicy(qtw.QSizePolicy.Expanding, qtw.QSizePolicy.Expanding) self.setStyleSheet(self.button_stylesheet) #self.clicked.connect(qtc.QCoreApplication.instance().quit) def press_button(self): if self.isEnabled(): self.setEnabled(False) self.setText('Send Order') else: self.setEnabled(True) self.setText('Sent') class SoundWidget(qtw.QWidget): def __init__(self): super().__init__() self.setLayout(qtw.QGridLayout()) #Send Order Button self.sendorder_button = SendOrderButton() self.sendorder_button.setShortcut(qtg.QKeySequence('Tab')) self.layout().addWidget(self.sendorder_button, 5, 0, 1, 2) self.sendorder_button.clicked.connect(qtc.QCoreApplication.instance().quit) def main(): app = qtw.QApplication(sys.argv) window = MainWindow() window.show() app.exec_() if __name__ == '__main__': app = qtw.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
这是Q2.py,它具有第二个QApplication:
import sys
from PySide2.QtCore import (QAbstractTableModel, Slot)
from PySide2.QtWidgets import (QAction, QApplication, QMainWindow,QWidget)
class MainWindow(QMainWindow):
def __init__(self, widget):
QMainWindow.__init__(self)
# Exit QAction
exit_action = QAction("Exit", self)
exit_action.setShortcut("Ctrl+Q")
exit_action.triggered.connect(self.exit_app)
@Slot()
def exit_app(self, checked):
sys.exit()
class CustomTableModel(QAbstractTableModel):
def __init__(self, data=None):
QAbstractTableModel.__init__(self)
class Widget(QWidget):
def __init__(self):
QWidget.__init__(self)
# Getting the Model
self.model = CustomTableModel()
def main():
app2 = QApplication()
widget = Widget()
window2 = MainWindow(widget)
window2.show()
sys.exit(app2.exec_())
if __name__ == "__main__":
app = QApplication()
widget = Widget()
window = MainWindow(widget)
window.show()
sys.exit(app.exec_())
我想创建一个QApplication,然后使用键盘快捷键退出它。然后,python脚本应调用另一个QApplication。我目前的问题是,当第二个...
如评论中所述,Qt应用程序只能并且应该具有QApplication(您可能不遵循此规则,但是不能保证它可以正常工作,因此您将不得不重新构造代码。