我们讨论的是python2.7和PyQt4。
我正在使用一个名为PyCorder的开源程序进行脑电分析,该程序接收系统电极放大器的数据,并将其绘制成图形用户界面;出于这个问题的目的,我们可以将其视为黑匣子。我用Qt设计器实现了一个简单的接口。我的目标是同时运行PyCorder和我的接口,以便它们之间可以交换数据。
在这里,启动我的接口的代码行:
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())我想与Qt设计器所做的任何接口都是常见的;下面是PyCorder启动部分:
def main(args):
print "Starting PyCorder, please wait ...\n"
setpriority(priority=4)
app = Qt.QApplication(args)
try:
win = None
win = MainWindow()
win.showMaximized()
if ShowConfirmationDialog:
accept = Qt.QMessageBox.warning(None, "PyCorder Disclaimer", ConfirmationText,
"Accept", "Cancel", "", 1)
if accept == 0:
win.usageConfirmed = True
app.exec_()
else:
win.close()
else:
win.usageConfirmed = True
app.exec_()
except Exception as e:
tb = GetExceptionTraceBack()[0]
Qt.QMessageBox.critical(None, "PyCorder", tb + " -> " + str(e))
if win != None:
win.close()
# show the battery disconnection reminder
if ShowBatteryReminder and win and win.usageConfirmed:
DlgBatteryInfo().exec_()
print "PyCorder terminated\n"
if __name__ == '__main__':
main(sys.argv)只知道这两部份的守则是否足以回答我的问题?有什么工具箱可以帮助我达到目标吗?
发布于 2018-06-24 17:55:06
我认为最好的方法是使用多个处理库来多次运行QT。https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing是您可以使用的库之一。
发布于 2018-06-24 21:58:44
有很多方法可以做到这一点,但我更喜欢使用中央“窗口管理器”充当两个窗口的所有者和通信中心。下面是该技术的示例,需要根据您的需要进行调整。注意,我使用的是Qt5。我在Qt5上进行了测试,然后尝试在不进行测试的情况下将其转换为Qt4。这应该是对的,但可能需要一点推特。
from PyQt4 import QtCore, QtGui
class WindowManager(QtCore.QObject):
"""
Inheriting from QObject has benefits.
For instance, the WindowManager can not have pyQtSignal members, if needed
"""
def __init__(self):
super(WindowManager, self).__init__()
self.firstWindow = FirstWindow(self)
self.secondWindow = SecondWindow(self)
self.firstWindow.show()
self.secondWindow.show()
class FirstWindow(QtGui.QMainWindow):
def __init__(self, manager):
super(FirstWindow, self).__init__()
self.manager = manager
self.mainWidget = QtGui.QWidget()
self.setCentralWidget(self.mainWidget)
self.mainLayout = QtGui.QVBoxLayout(self.mainWidget)
self.clickyButton = QtGui.QPushButton("Click me")
self.mainLayout.addWidget(self.clickyButton)
self.clickyButton.clicked.connect(self.clickyButtonClicked)
def clickyButtonClicked(self, checked=None):
self.manager.secondWindow.setMessage("Clicky button clicked")
class SecondWindow(QtGui.QMainWindow):
def __init__(self, manager):
super(SecondWindow, self).__init__()
self.manager = manager
self.mainWidget = QtGui.QWidget()
self.setCentralWidget(self.mainWidget)
self.mainLayout = QtGui.QVBoxLayout(self.mainWidget)
self.messageBox = QtGui.QLabel()
self.mainLayout.addWidget(self.messageBox)
def setMessage(self, message):
self.messageBox.setText(message)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
manager = WindowManager()
sys.exit(app.exec_())https://stackoverflow.com/questions/51012350
复制相似问题