鱼C论坛

 找回密码
 立即注册
查看: 1759|回复: 1

在Tkinter的Toplevel中修改全局变量,但在主窗口中没有变?

[复制链接]
发表于 2021-1-13 15:41:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Nmbh 于 2021-1-13 16:09 编辑

为了我在Toplevel中修改全局变量,但在主窗口中该没有变化?
我写了个修改分辨率的测试界面,把setting设置为全局变量,修改分辨率就修改setting的值,但为什么在Toplevel中修改setting后,在主窗口内的setting没有变化?
  1. from tkinter import *

  2. def Change(top,op_menu_var):
  3.     setting = op_menu_var.get()
  4.     print('修改分辨率为%s' %setting) #这里的setting会随选择的分辨率而变化
  5.    
  6.     top.destroy()

  7. def CreateTop():
  8.     top = Toplevel()
  9.     top.geometry('%dx%d' % (300,300))
  10.     top.title('Settings')
  11.     top.grab_set()
  12.     Label(top, text='分辨率:',font = ('微软雅黑', 15)).grid(row=0,padx=5,pady=5)
  13.    
  14.     op_menu_var = StringVar()
  15.     op_menu_var.set(setting)
  16.     OptMenu = OptionMenu(top,op_menu_var,*geometry)
  17.     OptMenu.config(width=20)
  18.     OptMenu.grid(row=0,column=1,padx=5,pady=5)
  19.     # menubtton.config(bg = "GREEN")
  20.     Button(top,text= '确定',font = ('微软雅黑', 15), command = lambda :Change(top,op_menu_var)).grid(row=1,column=0)
  21.     Button(top,text= '取消',font = ('微软雅黑', 15), command = top.destroy).grid(row=1,column=1)
  22.    
  23. global setting
  24. setting = '800x600'

  25. geometry = ['800x600',
  26.             '1024x768',
  27.             '1360x800',
  28.             '1600x960',
  29.             '1920x1080']

  30. root = Tk()
  31. root.title('Demo')
  32. root.geometry('%dx%d' % (root.winfo_screenwidth()/3,root.winfo_screenheight()/2))
  33. textlabel = Label(root,
  34.                   text = '测试GUI',
  35.                   
  36.                   font =  ('微软雅黑', 20),
  37.                   fg = 'black',
  38.                   )

  39. textlabel.pack(padx=5,pady=5)

  40. button5 = Button(root, text='设置分辨率', font = ('微软雅黑', 20), command = CreateTop)
  41. button5.pack(padx=10, pady = 10)
  42. button4 = Button(root, text = '打印分辨率',font =  ('微软雅黑', 20), command =
  43. lambda:print(setting))  #这里点击按钮,一直打印'800x600',即使修改分辨率也没用
  44. button4.pack(padx=10, pady = 10)
  45. mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-13 16:19:48 | 显示全部楼层
经过一番琢磨,发现自己把global的位置写错了,把global写到CreateTop()和Change(top,op_menu_var)里就解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 09:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表