因此,我一直在尝试创建自己的终端,但是事实证明,该终端非常故障且不专业。
然后我偶然发现了用于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。
答案 0 :(得分:1)
在PyQt5中。如果将其转换为整数,则winId()返回<sip.voidptr object at 0x7ff710025aa8>
,它将起作用。
这是工作代码:
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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)
# Works also with urxvt:
self.process.start(
'urxvt',['-embed', str(int(self.winId()))])
print(self.winId())
self.setGeometry(1, 1, 800, 600)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = embterminal()
main.show()
sys.exit(app.exec_())