Печать текста из функции в ярлык tkinter - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь получить список файлов из команды os.listdir для печати в метку tkinter. Я попробовал несколько обходных путей, но ничего из этого не сработало для меня.

def booth_bcode_test_window():
booth_bcode_test_window = tk.Toplevel(MainMenu, width=print_width, height=print_height)
booth_bcode_test_window.title("BARCODE TEST")
print_frame = tk.Frame(booth_bcode_test_window, bg='black', bd=5)
print_frame.place(relx=0.5, rely=0.1, relwidth=0.9, relheight=0.8, anchor='n')
print_label = tk.Label(print_frame, bg='gray', font=('courier new',18))
print_label.place(relwidth=1, relheight=1)
confirm_button = tk.Button(booth_bcode_test_window, text="Rename Files", width=10, command=test_click)
confirm_button.place(relx=0.5, rely=0.93, anchor='n')
cancel_button = tk.Button(booth_bcode_test_window, text="Cancel", width=10, command=booth_bcode_test_window.destroy)
cancel_button.place(relx=0.62, rely=0.93, anchor='n')
test_button_tbar = tk.Button(booth_bcode_test_window, text="Run Test", width=10, command=print_test)
test_button_tbar.place(relx=0.38, rely=0.93, anchor='n')

Что мне нужно, так это уметь эффективно запускать функцию при нажатии кнопки и печатать результаты. в ярлыке.

print_label = tk.Label(print_frame, text="this works if I want to type soemthing in" bg='gray', font=('courier new',18))

Однако, если я буду использовать что-то вроде этого:

print_label = tk.Label(print_frame, text=test_function, bg='gray', font=('courier new',18))

или:

print_label = tk.Label(print_frame, text=test_function(), bg='gray', font=('courier new',18))

Я не могу получитьрезультаты этих функций для печати в предопределенную область, которую я создал для метки.

Я определил эти функции, это меню с графическим интерфейсом с несколькими окнами, все нажатия кнопок и т. д. работают нормально - я 'Я просто пытаюсь отобразить мою информацию и, кажется, не могу ее там показать.

Я хотел бы, например, я пытаюсь перечислить имена файлов в определенном каталоге, поэтому я определил функцию listdirкоторый печатает файлы в указанном каталоге.

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

Я гаЯ пытался использовать команду get, однако это может быть результатом того, что я не использовал это должным образом. поскольку в нем говорится, что функция не имеет атрибута get.

Я обновил информацию, пытаясь отобразить результаты в окне сообщения, как и после дальнейших исследований - получить список, показывающий, что это был рекомендуемый способ:

def print_filenames():
for f in sorted(os.listdir(ImageDirBT)):
    print(f)



def test_function():
    print_filename_test.set("File list...")


def confirm_function():
     print_filename_test.set("Renaming the files...")


def bcode_test_window():
     bcode_test_window = tk.Toplevel(MainMenu, width=print_width, 
height=print_height)
    bcode_test_window.title("BARCODE TEST")
    print_frame = tk.Frame(bcode_test_window, bg='black', bd=5)
    print_frame.place(relx=0.5, rely=0.1, relwidth=0.9, relheight=0.8, anchor='n')
    print_text = tk.Message(print_frame, 
bg='gray',textvariable=print_filename_test, anchor='nw', font=('courier new',11), width=1100)
    print_text.place(relwidth=1, relheight=1)
    confirm_button = tk.Button(bcode_test_window, text="Rename Files", width=10, command=lambda: confirm_function())
    confirm_button.place(relx=0.5, rely=0.93, anchor='n')
    cancel_button = tk.Button(bcode_test_window, text="Cancel", width=10, command=bcode_test_window.destroy)
    cancel_button.place(relx=0.62, rely=0.93, anchor='n')
    test_button_tbar = tk.Button(bcode_test_window, text="Run Test", width=10, command=lambda: test_function())
    test_button_tbar.place(relx=0.38, rely=0.93, anchor='n')

Так что я могу получить кнопки для изменения текста в окне сообщения. Я хочу получить результаты print_filenames (): появиться в строке сообщения для строки. Прокручиваемый, если результаты не помещаются на экране.

1 Ответ

0 голосов
/ 15 октября 2019

Вы должны получить строки из os.listdir() и объединить их в один текст, а затем вставить Label или Message

    filenames = sorted(os.listdir(ImageDirBT))
    text = "\n".join(filenames)
    #label['text'] = text # change text in Label
    print_filename_test.set(text) # change text in Message

Минимальный рабочий пример

import os
import tkinter as tk

def get_filenames():
    filenames = sorted(os.listdir('.'))
    text = "\n".join(filenames)
    label['text'] = text # change text in label


root = tk.Tk()

label = tk.Label(root) # empty label 
label.pack()

tk.Button(root, text="OK", command=get_filenames).pack()

root.mainloop()
...