Python 全局变量未定义?Can';t获取标签以显示函数中的全局变量

Python 全局变量未定义?Can';t获取标签以显示函数中的全局变量,python,tkinter,Python,Tkinter,这是我为学习Python编写的一个小程序,Python是一个NPC特征生成器,可以从文本文件生成随机单词 我的随机生成器可以工作,但我无法使它在标签中正确显示。我目前将pertrait设置为global,但它似乎没有选择要显示在标签中的变量?我尝试设置StringVar,但似乎也无法使其正常工作 import tkinter as tk from tkinter import font # Random Personality generation from text list def ge

这是我为学习Python编写的一个小程序,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()
print()
不返回值,您忽略了调用
gen()

更改:

pertrait = print(random.choice(open(
    'F:\\Desktop\\python\\RandomGenerator py\\CharTraitList.txt').read(
    ).split()).strip())
致:


但实际上,最好不要避免全局生成,返回值并分配
gen()
ot
pertrait

在调用
gen()
之前很久就创建了标签。您可能应该从
gen()
中创建(或至少设置)标签的文本,因为此时您知道标签的文本是什么。
print()
不返回值,因此
pertrait
设置为无。
print
返回值;它返回
None
<单击按钮时,将调用代码>生成。没有使用回调的返回值,因此使用了全局变量。感谢您的帮助,我找到了它。一旦我将gen设置为return而不是print,它就开始正常工作了。我的下一个挑战是让标签在每次单击“生成”按钮时更新。我知道按钮工作正常,只是要让下一部分工作。谢谢你的帮助!
pertrait = random.choice(open(
    'F:\\Desktop\\python\\RandomGenerator py\\CharTraitList.txt').read(
    ).split()).strip()