因此,我一直在尝试创建我自己的终端,但事实证明这是非常错误的,而且看起来不专业。
然后我偶然发现了这段用于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。
发布于 2018-08-23 17:41:03
在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_())https://stackoverflow.com/questions/51975678
复制相似问题