pyqt5 - 如何在 Pyqt5 GUI 中嵌入 URxvt 终端?
问题描述
我在 QtChooser 中构建了一个 GUI,它的代码是用 PyQt5 编写的。我在 GUI 中总共有 7 个选项卡,每个选项卡都在我的代码的 QMainWindow 类中定义。这些定义包含每个 TextEdit、LineEdit、PushButtons、RadioButtons 等的代码。但是,在其中一个选项卡中,我想嵌入一个外部终端,当在该选项卡中单击特定 PushButton 时,该终端将打开。切换 RadioButton 时,我能够打开 Urxvt 终端。我现在面临的问题是专门在 TextEdit 区域打开终端。这就是原始 GUI(内置在 QtDesigner 中的样子。我需要在输出标签下方的 TextEdit 中打开终端。 但是,这是运行代码时终端在 GUI 中打开的方式 这是更新代码的一部分:
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QMessageBox, QAction
from PyQt5.QtCore import QDate, QTime, QDateTime, Qt
import sys
import platform
import os
import subprocess
import time
import re
import textwrap
class EmbTerminal(QtWidgets.QWidget):
def __init__(self, parent=None):
super(EmbTerminal, self).__init__()
self.process = QtCore.QProcess(self)
self.terminal = QtWidgets.QWidget(self)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.terminal)
# Works also with urxvt:
self.process.start('urxvt',['-embed', str(int(self.winId())), '-bg', '#000000', '-fg', '#ffffff'])
self.setFixedSize(539, 308)
class Ui_Dialog(QtWidgets.QMainWindow):
def __init__(self):
super(Ui_Dialog, self).__init__()
#Load GUI from QT5 Designer
uic.loadUi("S1_mainwindow.ui", self)
def openTerminalCheckBox (self):
if self.openTerminalRMachineRadioButton.isChecked():
status = True
self.commandLineRemoteCommandRMachineLineEdit.setDisabled(True)
self.commandlineRemoteCommandRMachineLabel.setDisabled(True)
self.executeRemoteCommandRMachinePushButton.setDisabled(True)
self.remoteMachineOutputLabel.setText("Terminal")
self.outputRMachineTextEdit = QtWidgets.QTabWidget()
self.gridLayout_6.addWidget(self.outputRMachineTextEdit)
self.outputRMachineTextEdit.addTab(EmbTerminal(), "EmbTerminal")
else:
status = False
app = QtWidgets.QApplication(sys.argv) # Create an instance of QtWidgets.QApplication
window = Ui_Dialog()
main = mainWindow()
main.show() # Create an instance of our class
app.exec_()
我需要在该选项卡中已经定义的 QTextEdit 中专门打开终端。你们有什么建议/意见吗?
解决方案
推荐阅读
- c# - Unity,实例化预制件上的类在对象之间是不同的
- logstash - 遵循 IIS 服务器日志的 Grok 模式是什么?
- mysql - 使用 Spring Data JPA 和 mysql 数据库接收 CommunicationsException
- angular - 在运行时初始化值时如何从其他组件获取变量的值?
- ruby-on-rails - 在 Rails 5 上使用 webpacker 时,Travis 的必要设置是什么?
- testng - 有没有办法在 After 方法中使用 ITestResult 获取完整的错误/异常?
- python - 从 cron odoo 更新字段
- vuejs2 - 为什么 Dynamite Vue 组件在数组中自动刷新
- ios - 子类化 UICollectionViewFlowLayout - iOS 12 中的自动调整单元格框架计算问题
- apache - Apache 总是加载相同的虚拟主机