鱼C论坛

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

[已解决]我这是用了一个假的global吗?

[复制链接]
发表于 2020-11-26 13:34:34 | 显示全部楼层 |阅读模式

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

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

x
  1. Exception in Tkinter callback
  2. Traceback (most recent call last):
  3.   File "C:\Users\Administrator.WIN7U-20190717R\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
  4.     return self.func(*args)
  5.   File "C:\Users\Administrator.WIN7U-20190717R\Desktop\编程\安装包制作工具\Alpha 0.1\Main.py", line 35, in 添加
  6.     w7.insert(w5.get(),END)
  7. NameError: name 'w7' is not defined
复制代码

  1. import zipfile
  2. import os
  3. from tkinter import *

  4. ver = "Alpha 0.1"
  5. main = Tk()
  6. main.title("安装包制作工具 "+ver)

  7. def start():
  8.   global w1
  9.   global w2
  10.   global w3
  11.   global main
  12.   w1.grid_forget()
  13.   w2.grid_forget()
  14.   w3.grid_forget()

  15.   name = w1.get()
  16.   
  17.   try:
  18.     os.mkdir(name)
  19.   except:
  20.     pass

  21.   w5 = Entry(main)
  22.   w5.grid(row = 0,column = 0)

  23.   w7 = Listbox(main)
  24.   w7.grid(row = 1,column = 0)

  25.   def 添加():
  26.     global w5
  27.     global w7
  28.    
  29.     w7.insert(w5.get(),END)

  30.   w6 = Button(main,text = "添加",command = 添加)
  31.   w8 = Label(main,text = "请在\n输入\n框中\n输入\n目标\n绝对\n路径")

  32.   w6.grid(row = 0,column = 1)
  33.   w8.grid(row = 1,column = 1)
  34.   
  35. w1 = Entry(main)
  36. w2 = Label(main,text = "请输入项目名称:")
  37. w3 = Button(main,text = "开始",command = start)

  38. w1.grid(row = 0,column = 1)
  39. w2.grid(row = 0,column = 0)
  40. w3.grid(row = 0,column = 2)

  41. main.mainloop()
复制代码
最佳答案
2020-11-26 13:47:54

你 w7 和 w5 本身定义时候就是局部变量

所以不能通过 global 来声明,你应该先在全局设置两个值,例如:

  1. w5,w7 = None,None
复制代码


然后在 start 函数进行声明(这里只拷贝部分代码):

  1. def start():
  2.     global w1
  3.     global w2
  4.     global w3
  5.     global w5
  6.     global w7
  7.     global main
复制代码


内部函数添加可以改成这样:

  1. def 添加():
  2.     w7.insert(w5.get(), END)
复制代码


Ps:建议不要用中文设置为变量名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-26 13:47:54 | 显示全部楼层    本楼为最佳答案   

你 w7 和 w5 本身定义时候就是局部变量

所以不能通过 global 来声明,你应该先在全局设置两个值,例如:

  1. w5,w7 = None,None
复制代码


然后在 start 函数进行声明(这里只拷贝部分代码):

  1. def start():
  2.     global w1
  3.     global w2
  4.     global w3
  5.     global w5
  6.     global w7
  7.     global main
复制代码


内部函数添加可以改成这样:

  1. def 添加():
  2.     w7.insert(w5.get(), END)
复制代码


Ps:建议不要用中文设置为变量名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-7 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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