鱼C论坛

 找回密码
 立即注册
查看: 3365|回复: 6

如何将按钮事件获取的数据传递到函数外

[复制链接]
发表于 2023-2-28 15:41:40 | 显示全部楼层 |阅读模式

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

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

x
我在学习tkinter
想要将导入的excel文件
获取它的表单名字到listbox
然后通过点击按钮选择表单,
将数据加载到程序中。

目前碰到的问题是:
我已经在listbox选择了表单
获取了表单的名字
但是无法把这个名字传递到表单之外。

先感谢有指教我的友友!!
代码如下:
# 获取excel多个分表的名字,形成一个列表
import openpyxl as oy
from tkinter import *

file_name = 'test.xlsx'
workbook = oy.load_workbook(file_name)
sheet_names = workbook.sheetnames
print(sheet_names)


# 创建窗口,下拉列表进行选择excel的分表

'''tkinter列表框按钮'''

listWin = Tk()
listWin.title('列表窗口')
listWin.geometry('500x300')
lbVal = StringVar()
lbVal.set(sheet_names)
lb = Listbox(listWin, listvariable=lbVal)
lb.pack()
labelVal = StringVar()
lab = Label(listWin, bg='red', width=6, textvariable=labelVal)
lab.pack()


def getListBoxValue():
    q = lb.curselection()
    sheet_name = lb.get(q)
    labelVal.set(sheet_name)

    return sheet_name
clickBtn=Button(listWin, text='导入表单', width=10, height=2, command=getListBoxValue)
clickBtn.pack()

listWin.mainloop()


如何将sheet_name这个变量的点击事件值传递出去????
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-28 16:10:25 | 显示全部楼层
把它设为全局变量
  1. import openpyxl as oy
  2. from tkinter import *

  3. file_name = 'test.xlsx'
  4. workbook = oy.load_workbook(file_name)
  5. sheet_names = workbook.sheetnames
  6. print(sheet_names)


  7. # 创建窗口,下拉列表进行选择excel的分表

  8. '''tkinter列表框按钮'''

  9. listWin = Tk()
  10. listWin.title('列表窗口')
  11. listWin.geometry('500x300')
  12. lbVal = StringVar()
  13. lbVal.set(sheet_names)
  14. lb = Listbox(listWin, listvariable=lbVal)
  15. lb.pack()
  16. labelVal = StringVar()
  17. lab = Label(listWin, bg='red', width=6, textvariable=labelVal)
  18. lab.pack()


  19. def getListBoxValue():
  20.     global sheet_name                  # 注意这行
  21.     q = lb.curselection()
  22.     sheet_name = lb.get(q)
  23.     labelVal.set(sheet_name)

  24. clickBtn=Button(listWin, text='导入表单', width=10, height=2, command=getListBoxValue)
  25. clickBtn.pack()

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

使用道具 举报

发表于 2023-2-28 16:13:41 | 显示全部楼层
是要这样的东东吗
  1. import openpyxl as oy
  2. from tkinter import *
  3. import tkinter.messagebox

  4. file_name = '2022.xlsx'
  5. workbook = oy.load_workbook(file_name)
  6. sheet_names = workbook.sheetnames
  7. print(sheet_names)


  8. # 创建窗口,下拉列表进行选择excel的分表

  9. '''tkinter列表框按钮'''

  10. listWin = Tk()
  11. listWin.title('列表窗口')
  12. listWin.geometry('500x300')
  13. lbVal = StringVar()
  14. lbVal.set(sheet_names)
  15. lb = Listbox(listWin, listvariable=lbVal)
  16. lb.pack()
  17. labelVal = StringVar()
  18. lab = Label(listWin, bg='red', width=6, textvariable=labelVal)
  19. lab.pack()


  20. def listclickevent(event):
  21.    m=lb.get(lb.curselection())
  22.    tkinter.messagebox.showinfo("友情提示","您现在进行的是鼠标双击操作 \n 您选中的项目是"+m)
  23.    
  24. lb.bind("<Double-1>",listclickevent)


  25. listWin.mainloop()
复制代码


另:treeview 要比listbox 要好一些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-2 09:44:31 | 显示全部楼层
isdkz 发表于 2023-2-28 16:10
把它设为全局变量

这个试过不行,但还差一步,别的函数要用这个作为参数传递就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-2 09:46:01 | 显示全部楼层
wp231957 发表于 2023-2-28 16:13
是要这样的东东吗

嗯,你这个是获取了点击事件,我设置的是个按钮事件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 09:49:40 From FishC Mobile | 显示全部楼层
pysunred 发表于 2023-3-2 09:46
嗯,你这个是获取了点击事件,我设置的是个按钮事件

你想实现啥呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-2 10:29:08 | 显示全部楼层

我就是想让按钮事件产生的变量值传递到另外的函数中,已经实现了,谢谢啊!!
主要是对函数不熟悉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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