鱼C论坛

 找回密码
 立即注册
查看: 896|回复: 7

[已解决]关于事件绑定出错!

[复制链接]
发表于 2020-4-28 18:19:46 | 显示全部楼层 |阅读模式

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

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

x
我是想做一个点选version会对应一个十六进制数字,然后转换为十进制。  比如选择  1---->  十六进制位置显示 0x1D4C00

写了个事件绑定,绑定左键点击的目标就会打印出来,但是显示出错了,
然后我把事件绑定的单独提取出来了,单独测试,结果却是可以用的。求大佬给个办法!


全局详情图:

全局详情

全局详情


全局代码:
  1. from tkinter import *  # 控件基础包,导入这个包后,这个包下的所有函数可以直接调用
  2. from tkinter import filedialog, messagebox
  3. from tkinter.ttk import Combobox
  4. from urllib.parse import quote

  5. class MainWindow():
  6.     # 初始化
  7.     def __init__(self):
  8.         top_button_width = 15 #用于设置按钮宽度
  9.         button_relief = RAISED #用于设置图标效果,这里设为凸起

  10.         # 创建顶层窗口
  11.         root = Tk()
  12.         self.src_filename = None
  13.         self.base_number_10 = StringVar()
  14.         self.base_number_10.set('00000000')
  15.         self.base_number_16 = StringVar()
  16.         self.base_number_16.set('00000000')
  17.         root.title('')
  18.         # 宽、高设为不可变,默认为True
  19.         root.resizable(width=False, height=False)

  20.         # 上部控件
  21.         b_open = Button(root, text='打开', relief=button_relief, width=top_button_width,  bg='green')
  22.         b_open.grid(row=0, column=0, columnspan=2, sticky=W)
  23.         
  24.         b_showall = Button(root, text='显示原文', relief=button_relief, width=top_button_width, bg='green')
  25.         b_showall.grid(row=0, column=2)
  26.         
  27.         b_save = Button(root, text='保存', relief=button_relief, width=top_button_width, bg='green')
  28.         b_save.grid(row=0, column=3)
  29.         
  30.         b_special = Button(root, text='特殊情况', relief=button_relief, width=top_button_width, bg='green')
  31.         b_special.grid(row=0, column=4)
  32.         


  33.         # 空一行
  34.         la_blank = Label(root, text='')
  35.         la_blank.grid(row=1)

  36.         # 左侧控件

  37.         la_version = Label(root, text='VERSION')
  38.         la_version.grid(row=2, column=2, columnspan=2)
  39.         
  40.         la_read = Label(root, text='请选择VERSION-->')
  41.         la_read.grid(row=3, column=0)

  42.         
  43.         sb_version = Scrollbar(root)     #添加滚动条
  44.         sb_version.grid(row=3, column=4, sticky=W+N+S)  #使用grid时,这样才能填充满
  45.         
  46.         li_version = Listbox(root, selectmode=SINGLE, yscrollcommand=sb_version.set, width=30)
  47.         li_version.bind('<ButtonRelease-1>', self.print_item)
  48.         for i in range(1000):
  49.             li_version.insert(END, str(i))
  50.         li_version.grid(row=3, column=2, columnspan=2)
  51.         sb_version.config(command=li_version.yview)




  52.         la_blank = Label(root, text='')
  53.         la_blank.grid(row=4)

  54.         
  55.         la_10 = Label(root, text='十进制:===> ')
  56.         la_10.grid(row=5, column=0,  sticky=E)

  57.         en_10 = Entry(root, textvariable=self.base_number_10,width=30)
  58.         en_10.grid(row=5, column=2, columnspan=2)
  59.         
  60.         la_16 = Label(root, text='十六进制:===> ')
  61.         la_16.grid(row=6, column=0,  sticky=E)

  62.         en_16 = Entry(root, textvariable=self.base_number_16, width=30)
  63.         en_16.grid(row=6, column=2, columnspan=2)


  64.    

  65.    
  66.     def print_item(event):
  67.         print(li_version.get(li_version.curselection()))

  68. main = MainWindow()
  69. mainloop()
复制代码



提取详情图:


提取详情

提取详情


提取代码:
  1. from tkinter import *

  2. def print_item(event):
  3.     print(li_version.get(li_version.curselection()))



  4. root = Tk()


  5. sb_version = Scrollbar(root)     #添加滚动条
  6. sb_version.grid(row=3, column=2, sticky=W+N+S)  #使用grid时,这样才能填充满

  7. li_version = Listbox(root, selectmode=SINGLE, yscrollcommand=sb_version.set)
  8. li_version.bind('<ButtonRelease-1>', print_item)
  9. for i in range(1000):
  10.     li_version.insert(END, str(i))
  11. li_version.grid(row=3, column=0, columnspan=2)
  12. sb_version.config(command=li_version.yview)
复制代码



最佳答案
2020-4-28 19:39:26
lzone 发表于 2020-4-28 19:34
大佬你好,这样还是不行啊换了另一个报错了

NameError: name 'li_version' is not defined
  1. from tkinter import *  # 控件基础包,导入这个包后,这个包下的所有函数可以直接调用
  2. from tkinter import filedialog, messagebox
  3. from tkinter.ttk import Combobox
  4. from urllib.parse import quote

  5. def print_item(event):
  6.     print(li_version.get(li_version.curselection()))

  7. top_button_width = 15 #用于设置按钮宽度
  8. button_relief = RAISED #用于设置图标效果,这里设为凸起

  9. # 创建顶层窗口
  10. root = Tk()
  11. src_filename = None
  12. base_number_10 = StringVar()
  13. base_number_10.set('00000000')
  14. base_number_16 = StringVar()
  15. base_number_16.set('00000000')
  16. root.title('')
  17. # 宽、高设为不可变,默认为True
  18. root.resizable(width=False, height=False)

  19. # 上部控件
  20. b_open = Button(root, text='打开', relief=button_relief, width=top_button_width,  bg='green')
  21. b_open.grid(row=0, column=0, columnspan=2, sticky=W)

  22. b_showall = Button(root, text='显示原文', relief=button_relief, width=top_button_width, bg='green')
  23. b_showall.grid(row=0, column=2)

  24. b_save = Button(root, text='保存', relief=button_relief, width=top_button_width, bg='green')
  25. b_save.grid(row=0, column=3)

  26. b_special = Button(root, text='特殊情况', relief=button_relief, width=top_button_width, bg='green')
  27. b_special.grid(row=0, column=4)



  28. # 空一行
  29. la_blank = Label(root, text='')
  30. la_blank.grid(row=1)

  31. # 左侧控件

  32. la_version = Label(root, text='VERSION')
  33. la_version.grid(row=2, column=2, columnspan=2)

  34. la_read = Label(root, text='请选择VERSION-->')
  35. la_read.grid(row=3, column=0)


  36. sb_version = Scrollbar(root)     #添加滚动条
  37. sb_version.grid(row=3, column=4, sticky=W+N+S)  #使用grid时,这样才能填充满

  38. li_version = Listbox(root, selectmode=SINGLE, yscrollcommand=sb_version.set, width=30)
  39. li_version.bind('<ButtonRelease-1>', print_item)
  40. for i in range(1000):
  41.     li_version.insert(END, str(i))
  42. li_version.grid(row=3, column=2, columnspan=2)
  43. sb_version.config(command=li_version.yview)




  44. la_blank = Label(root, text='')
  45. la_blank.grid(row=4)


  46. la_10 = Label(root, text='十进制:===> ')
  47. la_10.grid(row=5, column=0,  sticky=E)

  48. en_10 = Entry(root, textvariable=base_number_10,width=30)
  49. en_10.grid(row=5, column=2, columnspan=2)

  50. la_16 = Label(root, text='十六进制:===> ')
  51. la_16.grid(row=6, column=0,  sticky=E)

  52. en_16 = Entry(root, textvariable=base_number_16, width=30)
  53. en_16.grid(row=6, column=2, columnspan=2)

  54. mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-28 18:47:20 | 显示全部楼层
  1. from tkinter import *  # 控件基础包,导入这个包后,这个包下的所有函数可以直接调用
  2. from tkinter import filedialog, messagebox
  3. from tkinter.ttk import Combobox
  4. from urllib.parse import quote

  5. class MainWindow():
  6.     # 初始化
  7.     def __init__(self):
  8.         top_button_width = 15 #用于设置按钮宽度
  9.         button_relief = RAISED #用于设置图标效果,这里设为凸起

  10.         # 创建顶层窗口
  11.         root = Tk()
  12.         self.src_filename = None
  13.         self.base_number_10 = StringVar()
  14.         self.base_number_10.set('00000000')
  15.         self.base_number_16 = StringVar()
  16.         self.base_number_16.set('00000000')
  17.         root.title('')
  18.         # 宽、高设为不可变,默认为True
  19.         root.resizable(width=False, height=False)

  20.         # 上部控件
  21.         b_open = Button(root, text='打开', relief=button_relief, width=top_button_width,  bg='green')
  22.         b_open.grid(row=0, column=0, columnspan=2, sticky=W)
  23.         
  24.         b_showall = Button(root, text='显示原文', relief=button_relief, width=top_button_width, bg='green')
  25.         b_showall.grid(row=0, column=2)
  26.         
  27.         b_save = Button(root, text='保存', relief=button_relief, width=top_button_width, bg='green')
  28.         b_save.grid(row=0, column=3)
  29.         
  30.         b_special = Button(root, text='特殊情况', relief=button_relief, width=top_button_width, bg='green')
  31.         b_special.grid(row=0, column=4)
  32.         


  33.         # 空一行
  34.         la_blank = Label(root, text='')
  35.         la_blank.grid(row=1)

  36.         # 左侧控件

  37.         la_version = Label(root, text='VERSION')
  38.         la_version.grid(row=2, column=2, columnspan=2)
  39.         
  40.         la_read = Label(root, text='请选择VERSION-->')
  41.         la_read.grid(row=3, column=0)

  42.         
  43.         sb_version = Scrollbar(root)     #添加滚动条
  44.         sb_version.grid(row=3, column=4, sticky=W+N+S)  #使用grid时,这样才能填充满
  45.         
  46.         li_version = Listbox(root, selectmode=SINGLE, yscrollcommand=sb_version.set, width=30)
  47.         li_version.bind('<ButtonRelease-1>', self.print_item)
  48.         for i in range(1000):
  49.             li_version.insert(END, str(i))
  50.         li_version.grid(row=3, column=2, columnspan=2)
  51.         sb_version.config(command=li_version.yview)




  52.         la_blank = Label(root, text='')
  53.         la_blank.grid(row=4)

  54.         
  55.         la_10 = Label(root, text='十进制:===> ')
  56.         la_10.grid(row=5, column=0,  sticky=E)

  57.         en_10 = Entry(root, textvariable=self.base_number_10,width=30)
  58.         en_10.grid(row=5, column=2, columnspan=2)
  59.         
  60.         la_16 = Label(root, text='十六进制:===> ')
  61.         la_16.grid(row=6, column=0,  sticky=E)

  62.         en_16 = Entry(root, textvariable=self.base_number_16, width=30)
  63.         en_16.grid(row=6, column=2, columnspan=2)


  64.    

  65.     @staticmethod
  66.     def print_item(event):
  67.         print(li_version.get(li_version.curselection()))

  68. main = MainWindow()
  69. mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-28 19:34:07 | 显示全部楼层

大佬你好,这样还是不行啊换了另一个报错了

NameError: name 'li_version' is not defined
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 19:39:26 | 显示全部楼层    本楼为最佳答案   
lzone 发表于 2020-4-28 19:34
大佬你好,这样还是不行啊换了另一个报错了

NameError: name 'li_version' is not defined
  1. from tkinter import *  # 控件基础包,导入这个包后,这个包下的所有函数可以直接调用
  2. from tkinter import filedialog, messagebox
  3. from tkinter.ttk import Combobox
  4. from urllib.parse import quote

  5. def print_item(event):
  6.     print(li_version.get(li_version.curselection()))

  7. top_button_width = 15 #用于设置按钮宽度
  8. button_relief = RAISED #用于设置图标效果,这里设为凸起

  9. # 创建顶层窗口
  10. root = Tk()
  11. src_filename = None
  12. base_number_10 = StringVar()
  13. base_number_10.set('00000000')
  14. base_number_16 = StringVar()
  15. base_number_16.set('00000000')
  16. root.title('')
  17. # 宽、高设为不可变,默认为True
  18. root.resizable(width=False, height=False)

  19. # 上部控件
  20. b_open = Button(root, text='打开', relief=button_relief, width=top_button_width,  bg='green')
  21. b_open.grid(row=0, column=0, columnspan=2, sticky=W)

  22. b_showall = Button(root, text='显示原文', relief=button_relief, width=top_button_width, bg='green')
  23. b_showall.grid(row=0, column=2)

  24. b_save = Button(root, text='保存', relief=button_relief, width=top_button_width, bg='green')
  25. b_save.grid(row=0, column=3)

  26. b_special = Button(root, text='特殊情况', relief=button_relief, width=top_button_width, bg='green')
  27. b_special.grid(row=0, column=4)



  28. # 空一行
  29. la_blank = Label(root, text='')
  30. la_blank.grid(row=1)

  31. # 左侧控件

  32. la_version = Label(root, text='VERSION')
  33. la_version.grid(row=2, column=2, columnspan=2)

  34. la_read = Label(root, text='请选择VERSION-->')
  35. la_read.grid(row=3, column=0)


  36. sb_version = Scrollbar(root)     #添加滚动条
  37. sb_version.grid(row=3, column=4, sticky=W+N+S)  #使用grid时,这样才能填充满

  38. li_version = Listbox(root, selectmode=SINGLE, yscrollcommand=sb_version.set, width=30)
  39. li_version.bind('<ButtonRelease-1>', print_item)
  40. for i in range(1000):
  41.     li_version.insert(END, str(i))
  42. li_version.grid(row=3, column=2, columnspan=2)
  43. sb_version.config(command=li_version.yview)




  44. la_blank = Label(root, text='')
  45. la_blank.grid(row=4)


  46. la_10 = Label(root, text='十进制:===> ')
  47. la_10.grid(row=5, column=0,  sticky=E)

  48. en_10 = Entry(root, textvariable=base_number_10,width=30)
  49. en_10.grid(row=5, column=2, columnspan=2)

  50. la_16 = Label(root, text='十六进制:===> ')
  51. la_16.grid(row=6, column=0,  sticky=E)

  52. en_16 = Entry(root, textvariable=base_number_16, width=30)
  53. en_16.grid(row=6, column=2, columnspan=2)

  54. mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-28 19:46:21 | 显示全部楼层

这样是可以了,谢谢!

不过能跟我说说我写的那个为什么会错呢,没搞懂这是为什么,我封装成类的反而会出错嘞,语法好像也问题吧,求大佬解释!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 19:49:06 | 显示全部楼层
lzone 发表于 2020-4-28 19:46
这样是可以了,谢谢!

不过能跟我说说我写的那个为什么会错呢,没搞懂这是为什么,我封装成类的反而会 ...

你这纯粹是乱封装,变量前面不加self,别的方法怎么访问?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-28 19:54:48 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-4-28 19:49
你这纯粹是乱封装,变量前面不加self,别的方法怎么访问?

那如果我要用类封装起来,该怎么做呢,能指点一下吗!刚学不太懂。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 20:15:01 From FishC Mobile | 显示全部楼层
lzone 发表于 2020-4-28 19:54
那如果我要用类封装起来,该怎么做呢,能指点一下吗!刚学不太懂。。

回去好好复习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 12:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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