python - 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 中。
任何帮助将非常感激!
解决方案
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
而不是导入 *如果您将几何管理器直接应用于它们并且您不打算在以后对它们进行更改,则无需按名称定义您的小部件。
你没有理由
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()
推荐阅读
- angular - 在验证 Angular 6 中使用 FormArray
- javascript - 锚标签自动上传文件场景
- ruby-on-rails - 无法在 cloud66 上安装 gem
- javascript - 有没有办法在 Javascript 中重用模板文字?
- javascript - amCharts4 - 如何在 Force Directed Tree 中的节点之间设置单个链接/边缘的样式?
- python - 是否有内置的 Python3 用于格式化代表多项式的前导系数的字符串?
- google-chrome-extension - 如何在扩展中嵌入来自 CSP 限制域的页面?
- c - 如何将 char 参数从 VB6 应用程序传递给 C DLL?
- javascript - JavaScript:附加到 .CSV 的顶部
- dynamics-crm - Dynamics 365 - 未过期的许可证密钥?服务器 2 服务器身份验证