【发布时间】:2018-07-31 20:56:49
【问题描述】:
我正在启动一个 QProcess,并希望每次将命令写入 QProcess 时都将生成的窗口置于顶部。
但是,如果我的进程是“gnuplot.exe”(Win7),绘图窗口将更新,但始终停留在 PyQt 窗口后面。我还没有找到一种方法把它带到前面,或者让它活跃,或者把注意力放在上面,或者你会怎么称呼它。 就像是 自我过程。 ... raise(), show(), activateWindow(), SetForegroundWindow, WindowStaysOnTopHint ... ???
这些帖子对我没有进一步的帮助
How to find the active PyQt window and bring it to the front
https://forum.qt.io/topic/30018/solved-bring-to-front-window-application-managed-with-qprocess/3
Bring QProcess window to front (running Qt Assistant)
代码如下:
import sys
from PyQt5.QtCore import QProcess, pyqtSlot
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
import subprocess
class MyWindow(QWidget):
def __init__(self):
super(MyWindow,self).__init__()
self.setGeometry(100,100,500,500)
self.button1 = QPushButton('New plot',self)
self.button1.clicked.connect(self.button1_clicked)
self.process = QProcess(self)
self.process.start(r'C:\Programs\gnuplot\bin\gnuplot.exe', ["-p"])
self.n = 1
def button1_clicked(self):
plotcmd = "plot x**"+str(self.n)+"\n"
self.process.write(plotcmd.encode())
self.n += 1
response = self.process.readAllStandardOutput()
print(str(response, encoding="utf-8"))
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyle("plastique")
window = MyWindow()
window.show()
sys.exit(app.exec_())
【问题讨论】:
-
不幸的是,这将是系统特定的。请参阅stackoverflow.com/a/2091530/1124661 以讨论它是如何在 Windows 中完成的。另请参阅stackoverflow.com/a/17273638/1124661,了解如何使用进程 ID 查找窗口。你可以使用
QProcess::processId()来获得它。
标签: python-3.x pyqt gnuplot pyqt5 qprocess