Output von Befehl in Textbox zeigen
Verfasst: Mittwoch 17. Juli 2019, 17:40
Hallo,
ich arbeite momentan an einem in Python geschriebenen Minecraft Launcher. Dabei bin ich auch schon relativ weit gekommen.Allerdings habe ich momentan ein Problem: Der Output von Minecraft soll auch in meinem Laucnher in einem neuen Tab erscheinen. Das funktioniert bisher zwar, allerdings friert mein Launcher während des ausführens von Minecraft ein. Er soll aber benutzbar bleiben. Wie stelle ich das am besten an?
Da der Code meines Launchers ziemlich groß ist und über mehrere Dateien geht, habe ich das ganze mal auf das wesentliche gekürzt. Statt Minecraft wird mit dem Klick auf den Button ping ausgeführt:
ich arbeite momentan an einem in Python geschriebenen Minecraft Launcher. Dabei bin ich auch schon relativ weit gekommen.Allerdings habe ich momentan ein Problem: Der Output von Minecraft soll auch in meinem Laucnher in einem neuen Tab erscheinen. Das funktioniert bisher zwar, allerdings friert mein Launcher während des ausführens von Minecraft ein. Er soll aber benutzbar bleiben. Wie stelle ich das am besten an?
Da der Code meines Launchers ziemlich groß ist und über mehrere Dateien geht, habe ich das ganze mal auf das wesentliche gekürzt. Statt Minecraft wird mit dem Klick auf den Button ping ausgeführt:
Code: Alles auswählen
#!/usr/bin/env python3
from PyQt5.QtWidgets import *
import subprocess
import sys
class GameOutputTab(QPlainTextEdit):
def executeCommand(self,command):
for text in self.run(command):
text = str(text)
self.appendPlainText(text[2:-1])
def run(self,command):
process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
while True:
line = process.stdout.readline().rstrip()
if not line:
break
yield line
class TabWindow(QTabWidget):
def setup(self):
widget = QWidget()
button = QPushButton("Klick mich!",widget)
button.clicked.connect(self.runGame)
self.addTab(widget,"General")
self.show()
def runGame(self):
output = GameOutputTab()
tabid = self.addTab(output,"Output")
self.setCurrentIndex(tabid)
output.executeCommand("ping -c 5 example.com")
app = QApplication(sys.argv)
tabs = TabWindow()
tabs.setup()
sys.exit(app.exec_())