Python 如何在pyqt中嵌入gnuplotqt?

Python 如何在pyqt中嵌入gnuplotqt?,python,pyqt,gnuplot,Python,Pyqt,Gnuplot,gnuplot终端qt接受小部件id()。 如何使用此id号将gnuplot qt窗口嵌入pyqt5应用程序?我希望有一个最低限度的工作代码 < P>一个类似的C++问题没有答案().< 作为比较,与tcl/tk(programwish)+x11终端相比,以下工作 set unit [open "| gnuplot 2>@1" w+] frame .x11 -bg "white" -width 640 -height 450 button .b1

gnuplot终端
qt
接受
小部件id
()。 如何使用此id号将gnuplot qt窗口嵌入pyqt5应用程序?我希望有一个最低限度的工作代码

< P>一个类似的C++问题没有答案().< 作为比较,与
tcl/tk
(program
wish
)+
x11
终端相比,以下工作

set unit [open "| gnuplot 2>@1" w+]  
frame .x11 -bg "white" -width 640 -height 450
button .b1 -text "some button"
pack .x11 .b1

puts $unit "set term x11 window '[winfo id .x11]'"
flush $unit

puts $unit "pl sin(x)"
flush $unit


您可以使用QProcess发送命令,并在这些命令中向其传递窗口id:

导入系统 从functools导入缓存的_属性 从PyQt5导入QtCore、QtWidgets 类GnuPlotManager(QtCore.QObject): @缓存的不动产 def过程(自我): qprocess=QtCore.qprocess() qprocess.setProgram(“gnuplot”) 返回qprocess def启动(自): self.process.start()文件 def发送命令(self,command): self.process.write((命令+“\n”).encode()) 类MainWindow(QtWidgets.QMainWindow): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuu(父级) central_widget=qtwidts.QWidget() self.setCentralWidget(中心窗口小部件) button=QtWidgets.QPushButton(“发送命令”) lay=qtwidts.QVBoxLayout(中心小部件) lay.addWidget(self.command_le) lay.addWidget(按钮) lay.addWidget(self.container) 按钮。点击。连接(点击自我处理) self.gnuplot_manager.start() self.gnuplot\u manager.send\u命令(“设置终端qt”) wid=int(self.container.winId()) self.gnuplot_manager.send_命令(f“set term x11窗口{wid:x}”) self.gnuplot\u manager.send\u命令(“清除”) self.command_le.setText(“plsin(x)”) 自我调整大小(640480) @缓存的不动产 def容器(自身): 返回qtwidts.QWidget() @缓存的不动产 def命令(自我): 返回QtWidgets.QLineEdit() @缓存的不动产 def gnuplot_经理(自我): 返回GnuPlotManager() 已单击def句柄(自身): self.gnuplot\u manager.send\u命令(self.command\u le.text()) self.updateGeometry() def主(args): app=qtwidts.QApplication(args) w=主窗口() w、 show() ret=app.exec 系统退出(ret) 如果名称=“\uuuuu main\uuuuuuuu”: 主(系统argv)

您可以使用QProcess发送命令,并在这些命令中向其传递窗口id:

导入系统 从functools导入缓存的_属性 从PyQt5导入QtCore、QtWidgets 类GnuPlotManager(QtCore.QObject): @缓存的不动产 def过程(自我): qprocess=QtCore.qprocess() qprocess.setProgram(“gnuplot”) 返回qprocess def启动(自): self.process.start()文件 def发送命令(self,command): self.process.write((命令+“\n”).encode()) 类MainWindow(QtWidgets.QMainWindow): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuu(父级) central_widget=qtwidts.QWidget() self.setCentralWidget(中心窗口小部件) button=QtWidgets.QPushButton(“发送命令”) lay=qtwidts.QVBoxLayout(中心小部件) lay.addWidget(self.command_le) lay.addWidget(按钮) lay.addWidget(self.container) 按钮。点击。连接(点击自我处理) self.gnuplot_manager.start() self.gnuplot\u manager.send\u命令(“设置终端qt”) wid=int(self.container.winId()) self.gnuplot_manager.send_命令(f“set term x11窗口{wid:x}”) self.gnuplot\u manager.send\u命令(“清除”) self.command_le.setText(“plsin(x)”) 自我调整大小(640480) @缓存的不动产 def容器(自身): 返回qtwidts.QWidget() @缓存的不动产 def命令(自我): 返回QtWidgets.QLineEdit() @缓存的不动产 def gnuplot_经理(自我): 返回GnuPlotManager() 已单击def句柄(自身): self.gnuplot\u manager.send\u命令(self.command\u le.text()) self.updateGeometry() def主(args): app=qtwidts.QApplication(args) w=主窗口() w、 show() ret=app.exec 系统退出(ret) 如果名称=“\uuuuu main\uuuuuuuu”: 主(系统argv)

c++问题有答案-第一个comment@mugiseyebrows技术上不是答案而是评论,但它在PyQT中看起来如何?C++问题有答案-第一comment@mugiseyebrows从技术上讲,这不是一个答案,而是一个评论,但它在pyqt中看起来如何?谢谢你的回复。看起来不错。然而,我得到了
importorror:cannotimportname'cached_property'
@Friedrich您使用的是哪种版本的python?如果使用低于python 3.8的版本,则必须安装
backports.cached property
python-m pip安装backports.cached property
,并将
从functools导入cached_property
更改为
从backports.cached_property导入cached_property
我有python 3.6.9。在您的帮助下,
cached_属性
错误消失。但是,
x11
窗口没有被绘制到qt应用程序中(可能太快了?)。它也适用于
qt
terminal吗?@Friedrich你说的qt terminal是什么意思?您按下按钮了吗?gnuplot的
qt
终端如中所述。然后,在您的代码
settermx11窗口中,{wid:x}
可能应该被
settermqt小部件{wid:x}
替换,谢谢您的回复。看起来不错。然而,我得到了
importorror:cannotimportname'cached_property'
@Friedrich您使用的是哪种版本的python?如果使用低于python 3.8的版本,则必须安装
backports.cached property
python-m pip安装backports.cached property
,并将
从functools导入cached_property
更改为
从backports.cached_property导入cached_property
我有python 3.6.9。在您的帮助下,
cached_属性
错误消失。但是,
x11
窗口没有被绘制到qt应用程序中(可能太快了?)。意志