Выполнение внешнего файла Python с помощью кнопки графического интерфейса и перенаправление вывода в текстовый виджет грPython

Программы на Python
Ответить
Anonymous
 Выполнение внешнего файла Python с помощью кнопки графического интерфейса и перенаправление вывода в текстовый виджет гр

Сообщение Anonymous »

Создан простой графический интерфейс, одна кнопка и один текстовый виджет. Я хочу, чтобы внешний файл Python запускался при нажатии кнопки, а его выходные данные отображались в текстовом виджете.
Внешний файл, который просто печатает слова из списка по одному слову в строке. до завершения, работает правильно, без ошибок, и его вывод поступает на консоль. Когда я нажимаю кнопку, я получаю консоль, которая мне не нужна, и вместо вывода появляется только мигающий курсор.
Консоль остается включенной в течение приблизительного времени, необходимое для работы. полностью, есть задержки по времени, поэтому я знаю, что он выполняет файл, но в то же время появляется консоль, в оболочке появляется ошибка.

Исключение в Обратный вызов Tkinter
Traceback (последний вызов последний):
Файл "C:\Users\Lou\AppData\Local\Programs\Python\Python313\Lib\tkinter\__init__.py", строка 2068, в __call__
return self.func(* args)
~~~~~~~~~^^^^^^^
Файл «C:\Users\Lou\Desktop\Python Development\Python Programs\8902A Op-Ver\Module Tester.py», строка 18, в btn_click
line = subprocess.stdout.readline().decode() ^^^^^^^^^^^^^^^^^
AttributeError: модуль «подпроцесс» не имеет атрибута 'stdout'

Код графического интерфейса:

Код: Выделить всё

import tkinter as tk
import subprocess
import sys, inspect
from subprocess import Popen

root = tk.Tk()
i = tk.PhotoImage(width=1, height=1)

# Title and GUI Size
root.title('Module Tester')
root.geometry("500x300")

# Button function
def btn_click():
btn_click.path = "Test Modules/Test Module 1.py"
Popen(["python", btn_click.path], stdout = subprocess.PIPE)
while True:
line = subprocess.stdout.readline().decode()
if not line:
break
output_box.insert(tk.END, line)
output_box = tk.Text(root, bd = 1, bg = "#3c3d3d", fg = '#7bfce9',
insertbackground='white', font = ("Segoe UI", 11), height = 5, width = 34)
output_box.place(x = 171, y = 167)

# Button
btn1_button = tk.Button(root, image=i, compound='c', width=115, height=20, bd = 1, bg = "#232124", fg = "#a571e5", activebackground="#a571e5", activeforeground="#232124", text = "Test Module 1", font = ("Segoe UI", 11), padx=0, pady=0, command=btn_click)
btn1_button.place(x = 10, y = 20)

root.mainloop()
Я понимаю, что создал функцию, которая вызывает мой внешний файл и должна перенаправить вывод моего внешнего файла и использует подпроцесс для преобразования его из потокового вывода в Python string, и я определил место для вывода. Я не уверен, что еще происходит, поскольку я все еще новичок в программировании на Python и еще не разбираюсь во всех деталях.

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-into-gui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»