鱼C论坛

 找回密码
 立即注册
查看: 2618|回复: 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这个变量的点击事件值传递出去????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-28 16:10:25 | 显示全部楼层
把它设为全局变量
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():
    global sheet_name                  # 注意这行
    q = lb.curselection()
    sheet_name = lb.get(q)
    labelVal.set(sheet_name)

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

listWin.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

file_name = '2022.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 listclickevent(event):
   m=lb.get(lb.curselection())
   tkinter.messagebox.showinfo("友情提示","您现在进行的是鼠标双击操作 \n 您选中的项目是"+m)
    
lb.bind("<Double-1>",listclickevent)
 

listWin.mainloop()

另:treeview 要比listbox 要好一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个试过不行,但还差一步,别的函数要用这个作为参数传递就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯,你这个是获取了点击事件,我设置的是个按钮事件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你想实现啥呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我就是想让按钮事件产生的变量值传递到另外的函数中,已经实现了,谢谢啊!!
主要是对函数不熟悉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-2 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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