[英]Embedding a terminal in PyQt5
所以我一直在嘗試創建自己的終端,但事實證明這非常有問題,而且看起來不專業。
然后我偶然發現了這段用於 PyQt4 的代碼:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class embterminal(QWidget):
def __init__(self):
QWidget.__init__(self)
self.process = QProcess(self)
self.terminal = QWidget(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
#self.process.start(
#'xterm',['-into', str(self.terminal.winId())])
# Works also with urxvt:
self.process.start(
'urxvt',['-embed', str(self.terminal.winId())])
if __name__ == "__main__":
app = QApplication(sys.argv)
main = embterminal()
main.show()
sys.exit(app.exec_())
由於我的應用程序是用 PyQt5 編寫的,因此我很自然地嘗試將該代碼移植到 PyQt5。 我from PyQt4.QtCore import * from PyQt4.QtGui import *
更改為from PyQt5.QtCore import * from PyQt5.QtGui import *
並添加from PyQt5.QtWidgets import *
然后當我運行我的代碼時,我意識到終端沒有彈出。
我想知道為什么會發生這種情況,是否有解決方法?
我也想知道我是否可以在同一個項目/文件中同時使用 PyQt5 和 PyQt4。
在 PyQt 中。 QWidget.winId()
返回一個sip.voidptr
對象,但如果將其轉換為整數,它應該可以工作。 這是一個工作示例:
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.process = QProcess(self)
self.terminal = QWidget(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
wid = str(int(self.terminal.winId()))
self.process.start('urxvt', ['-embed', wid])
def closeEvent(self, event):
self.process.terminate()
self.process.waitForFinished(1000)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.setGeometry(100, 100, 800, 600)
window.show()
sys.exit(app.exec_())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.