pysunred 发表于 2023-2-28 15:41:40

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

我在学习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这个变量的点击事件值传递出去????

isdkz 发表于 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()

wp231957 发表于 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 要好一些

pysunred 发表于 2023-3-2 09:44:31

isdkz 发表于 2023-2-28 16:10
把它设为全局变量

这个试过不行,但还差一步,别的函数要用这个作为参数传递就可以了。

pysunred 发表于 2023-3-2 09:46:01

wp231957 发表于 2023-2-28 16:13
是要这样的东东吗




嗯,你这个是获取了点击事件,我设置的是个按钮事件

wp231957 发表于 2023-3-2 09:49:40

pysunred 发表于 2023-3-2 09:46
嗯,你这个是获取了点击事件,我设置的是个按钮事件

你想实现啥呢

pysunred 发表于 2023-3-2 10:29:08

wp231957 发表于 2023-3-2 09:49
你想实现啥呢

我就是想让按钮事件产生的变量值传递到另外的函数中,已经实现了,谢谢啊!!
主要是对函数不熟悉
页: [1]
查看完整版本: 如何将按钮事件获取的数据传递到函数外