#python #tkinter
#python #tkinter
Вопрос:
Это небольшая программа, которую я создаю для изучения Python, которая является генератором признаков NPC, который генерирует случайные слова из текстового файла.
Мой генератор случайных чисел работает, но я не могу заставить его правильно отображаться в метке. В настоящее время для pertrait установлено значение global, но, похоже, оно не подбирает переменную для отображения в метке? Я попытался настроить StringVar, но, похоже, мне тоже не удалось заставить ее работать должным образом.
import tkinter as tk
from tkinter import font
# Random Personality generation from text list
def gen():
global pertrait
pertrait = print(random.choice(open(
'F:\Desktop\python\RandomGenerator py\CharTraitList.txt').read(
).split()).strip())
root = tk.Tk()
root.title("NPC Trait Generator")
root.geometry("500x200")
frame = tk.Frame(root)
frame.pack()
# define font
fontStyle = font.Font(family='Courier', size=44, weight='bold')
# background image variable and import
paper = tk.PhotoImage(
file='F:\Desktop\python\RandomGenerator py\papbckgrd.png')
butQuit = tk.Button(frame,
text="Quit",
fg="red",
command=quit)
butQuit.pack(side=tk.LEFT)
ButGen = tk.Button(frame,
text="Generate",
command=gen)
ButGen.pack(side=tk.RIGHT)
# Label generation
Trait1 = tk.Label(root,
compound=tk.CENTER,
text=pertrait,
font=fontStyle)
# image=paper) .pack(side="right")
Trait1.pack()
root.mainloop()
Комментарии:
1. Вы создаете метку задолго до того,
gen()
как она была вызвана. Вероятно, вам следует создать (или, по крайней мере, задать текст) метки изнутриgen()
, поскольку именно в этот момент вы знаете, каким будет текст метки.2.
print()
не возвращает значение, поэтомуpertrait
устанавливается значение None.
Ответ №1:
print()
не возвращает значение, и вы забыли вызвать gen()
!
Изменить:
pertrait = print(random.choice(open(
'F:\Desktop\python\RandomGenerator py\CharTraitList.txt').read(
).split()).strip())
Для:
pertrait = random.choice(open(
'F:\Desktop\python\RandomGenerator py\CharTraitList.txt').read(
).split()).strip()
Но на самом деле было бы намного лучше избежать глобального — make gen()
возвращает значение и присваивает результат gen()
ot pertrait
Комментарии:
1.
None
.gen
вызывается при нажатии кнопки. Возвращаемое значение обратного вызова не используется, следовательно, глобальная переменная.2. Спасибо вам за это, с вашей помощью я разобрался. Как только я установил gen для возврата вместо печати, он начал работать правильно. Моя следующая задача — заставить метку обновляться при каждом нажатии кнопки «Сгенерировать». Я знаю, что кнопка работает правильно, просто нужно запустить следующую часть. Спасибо за всю вашу помощь!