python - 在python中共享变量
问题描述
我正在尝试将变量从tkinter
类共享到全局代码,我有一个tkinter
gui,我在其中插入数据,一旦关闭tkinter
表单,我希望代码打印这些数据,但代码不接受我输入的数据,并返回另一个值。
这是代码:
class App:
def __init__(self, master):
self.username = None
self.frame1 = tk.LabelFrame (master, text="Instagram")
self.frame1.pack ()
self.dict = {'':[], 'Scienza': ['Nasa', '2', '3'],
'Moda': ['vladislavkirillov', 'barengo1', 'vittorio__badia'],
'Dunk Page': ['stupidpikachu', 'nascecresceignora', 'the_fucking_dank']}
self.categoria_pagina = tk.StringVar()
self.pagina_preimpostata = tk.StringVar()
self.username1 = tk.StringVar()
self.password = tk.StringVar()
self.pagina_tua = tk.StringVar()
self.commento1 = tk.StringVar()
Entry (self.frame1, textvariable=self.username1, bg="white").grid (column=1, row=2, sticky=tk.W)
Entry (self.frame1, textvariable=self.password, bg="white").grid (column=1, row=3, sticky=tk.W)
Entry (self.frame1, textvariable=self.pagina_tua, bg="white").grid (column=1, row=4, sticky=tk.W)
self.categoria_pagina.trace('w', self.updateoptions)
self.optionmenu_a = ttk.OptionMenu(self.frame1, self.categoria_pagina, *self.dict.keys())
self.categoria_pagina.set("Scienza")
self.optionmenu_a.grid(row = 7, column = 1)
self.optionmenu_b = ttk.OptionMenu(self.frame1, self.pagina_preimpostata, '')
self.optionmenu_b.grid(row = 8, column = 1)
self.variable_c = tk.StringVar ()
self.variable_d = tk.StringVar ()
def updateoptions(self, *args):
countries = self.dict[self.categoria_pagina.get()]
self.pagina_preimpostata.set(countries[0])
menu = self.optionmenu_b['menu']
menu.delete(0, 'end')
for country in countries:
menu.add_command(label=country, command=lambda country=country: self.pagina_preimpostata.set(country))
categoria = self.categoria_pagina.get()
pagina_preimpostata_stringa = self.pagina_preimpostata.get()
username= self.username1.get()
password= self.password.get()
pagina_tua=self.pagina_tua.get()
root = tk.Tk()
app = App(root)
root.mainloop()
print(app.username)
它返回值 None 代替我在tkinter
gui中插入的值
解决方案
问题是当您在代码中执行以下操作时
username= self.username1.get()
Python 在函数范围内创建一个局部变量,当函数结束时,该变量不再存在。所以你有多个是为了解决这个问题。
一是定义username
在__init__
App
self.username = None
在你的函数中使用
self.username = self.username1.get()
稍后您可以使用print(app.username)
另一种选择是使用全局变量(不推荐)
username = None
class App
.....
global username
username= self.username1.get()
....
print(username)
推荐阅读
- regex - 正则表达式未在列表中找到所有数字
- android - Android Studio 中原生代码的条件包含目录
- javascript - 计算数组中对象的总和
- symfony - 单元测试:使用构造函数依赖注入模拟服务类
- sql - 如何在 SQL ORACLE 中强制转换 DATE 列以获得正确的聚合
- java - 如何在骆驼 cxf 端点上配置超时
- git - 如何使用瓷器/工具而不是字符串替换来更新 Git refspec
- visual-studio-code - 无法在 Windows 上的 VSCode 中打开终端
- angular - Firebase 部署托管。其他人可以看到更改,但我看不到
- python-3.x - 为什么后台会出现ToolTip