全局变量未定义?无法获取标签以显示函数中的全局变量

问题描述

这是我正在学习的一个小程序,它是一个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())

收件人:

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

但是实际上最好避免使用全局方法-使gen()返回值并为gen()pertrait分配结果