首页 > 解决方案 > Tkinter 全局变量/.get()

问题描述

我是 python 初学者,目前正在尝试制作一个简单的 python 电子邮件应用程序。我一直在努力处理我的代码的一部分,如下所示:

from tkinter import *


root = Tk()
root.title("E-mail Application")
sender_emaillabel= Label(root,text="Enter Sender Email:").grid(row=0, column=0,columnspan=1)
e = Entry(root, width=35, borderwidth=5)
e.grid(row=1, column=0, columnspan=3, padx=10, pady=10)

def entersender_click():
    global sender_email
    sender_email=e.get()
    e.delete(0, END)
    return

entersender= Button(root, text="Enter", padx=10, pady=5, command=entersender_click).grid(row=1, column=4)

root.mainloop()

Pycharm 说“全局变量 'sender_email' 在模块级别未定义”,并且 sender_email 变量似乎没有将任何输入到 e 中。

任何帮助将非常感激!

标签: pythontkinterglobal

解决方案


PyCharm 希望您遵循特定的代码编写方式。它告诉你的是你没有sender_email首先在全局命名空间中定义。通过将此变量添加到全局命名空间并为其赋予默认值,PyCharm 将摆脱“警告”。

from tkinter import *


root = Tk()
root.title("E-mail Application")
sender_emaillabel= Label(root,text="Enter Sender Email:").grid(row=0, column=0,columnspan=1)
e = Entry(root, width=35, borderwidth=5)
e.grid(row=1, column=0, columnspan=3, padx=10, pady=10)

sender_email = ''  # Define it somewhere before the function.
                   # This will get rid of the lines under your code and the warning.

def entersender_click():
    global sender_email
    sender_email=e.get()
    e.delete(0, END)
    return

entersender= Button(root, text="Enter", padx=10, pady=5, command=entersender_click).grid(row=1, column=4)

root.mainloop()

我个人觉得这个警告让我自己很烦,因为我在我的课程中得到了很多,因为我没有__init__像它想要的那样定义所有的类属性。

有几件事可以改变想法。

  1. 使用import tkinter as tk而不是导入 *

  2. 如果您将几何管理器直接应用于它们并且您不打算在以后对它们进行更改,则无需按名称定义您的小部件。

  3. 你没有理由return在你的函数中使用,所以你可以删除它。

更新代码:

import tkinter as tk


root = tk.Tk()
root.title("E-mail Application")
tk.Label(root,text="Enter Sender Email:").grid(row=0, column=0,columnspan=1)
e = tk.Entry(root, width=35, borderwidth=5)
e.grid(row=1, column=0, columnspan=3, padx=10, pady=10)

sender_email = ''

def entersender_click():
    global sender_email
    sender_email=e.get()
    e.delete(0, END)

tk.Button(root, text="Enter", padx=10, pady=5, command=entersender_click).grid(row=1, column=4)

root.mainloop()

推荐阅读