提问者:小点点

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中的任何内容。

如有任何帮助,我们将不胜感激!


共1个答案

匿名用户

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__中定义所有的类属性。

一些改变想法的事情。

>

  • 使用import tkinter as tk而不是import*

    如果您将geometry manager直接应用于小部件,并且不打算在将来对它们进行更改,则无需按名称定义小部件。

    您没有理由在函数中使用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()