#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
. Есть две пустые строки вокруг объявлений функций и классов.