Результат печати Python tkinter не может быть завершен

#python #tkinter

Вопрос:

 import filecmp
import os
import tkinter as tk
import tkinter.font as tkFont
from tkinter import *

def gg():
    disk = (number_entry.get())

    if disk == "2" :
        DIRS = [r'C:Newtest1', r'C:Newtest2', r'C:Newtest3',r'C:Newtest4',r'C:Newtest5',r'C:Newtest6',r'C:Newtest7',r'C:Newtest8',r'C:Newtest9',r'C:Newtest10']
        FILES = [('copy1.txt', 'copy2.txt'), ('fcmp1.txt', 'fcmp2.txt'), ('filecp1.txt', 'filecp2.txt')]

        for e, dir in enumerate(DIRS, 1):
            cmp = True
            for file in FILES:
                try:
                    if not filecmp.cmp(os.path.join(dir, file[0]), os.path.join(dir, file[1])):
                        cmp = False
                        break
                except Exception as ex:
                        print(f'Error -> {ex}', file=sys.stderr)
                        continue
            x = (f'E_{e} compare {"pass" if cmp else "fail"}')
            print(x)
            result_label.configure(text=x,wraplength=300,font=fontExample3)

        DIRS = [r'C:Newtest1', r'C:Newtest2', r'C:Newtest3',r'C:Newtest4',r'C:Newtest5',r'C:Newtest6',r'C:Newtest7',r'C:Newtest8',r'C:Newtest9',r'C:Newtest10']
        FILES = [('copy1.txt', 'copy2.txt'), ('fcmp1.txt', 'fcmp2.txt'), ('filecp1.txt', 'filecp2.txt')]

        for e, dir in enumerate(DIRS, 1):
            cmp = True
window = tk.Tk()
window.title('XXX')
window.geometry('1200x700')
window.configure(background='Azure')


fontExample = tkFont.Font(family="Segoe UI", size=20)
fontExample2 = tkFont.Font(family="Segoe UI", size=10)
fontExample3 = tkFont.Font(family="Segoe UI", size=15)
header_label = tk.Label(window, text='XXXX',font=fontExample)
header_label.pack()

number_frame = tk.Frame(window)
number_frame.pack(side=tk.TOP)
number_label = tk.Label(number_frame, text='Number of disks',font=fontExample2)
number_label.pack(side=tk.LEFT)
number_entry = tk.Entry(number_frame)
number_entry.pack(side=tk.LEFT)
result_label = tk.Label(window)
result_label.pack()
calculate_btn = tk.Button(window, text='First calculate', command=gg,font=fontExample3)
calculate_btn.pack()

window.mainloop()
 

дорогие все ,

У меня есть вопрос в строке: result_label.configure(text=x,wraplength=300,font=fontExample3)

Я хочу, чтобы результат можно было распечатать полностью, как на моей консоли.
Результат Consele таков :

 E_1 compare pass  
E_2 compare fail  
E_3 compare pass  
E_4 compare pass  
E_5 compare pass  
E_6 compare pass
E_7 compare pass
E_8 compare pass
E_9 compare pass
E_10 compare fail
 

Но в tkinter результате получается -> E_10 compare fail

Пожалуйста, терпите меня как новичка tkinter .

Спасибо!

Ответ №1:

Если вы хотите добавить текст, который уже есть на этикетке, вы можете сделать это:

 result_label.configure(text=result_label['text']   x   'n')
 

result_label['text'] возвращает текущий текст виджета (эквивалентно result_label.cget('text') )

Вам также не нужно каждый раз настраивать длину обертки и шрифт, просто сделайте это один раз при создании такой метки:

 result_label = tk.Label(window, wraplenght=300, font=fontExample3)
 

Также:
Я настоятельно не рекомендуем использовать подстановочный знак ( * ) при импорте что-то, вы должны либо импортировать то, что вам нужно, например, from module import Class1, func_1, var_2 и так далее, либо импортировать весь модуль: import module вы также можете использовать псевдоним: import module as md или sth, как это, дело в том, что не все импортное, если вы на самом деле знаете, что Вы делаете; наименование столкновения эту проблему.

Я настоятельно рекомендую следовать руководству по стилю PEP 8 для кода на Python. Имена функций и переменных должны быть в snake_case , имена классов в CapitalCase . Есть две пустые строки вокруг объявлений функций и классов.