草生鸣间 2021-06-28 23:06 采纳率: 81.8%
浏览 103
已结题

tkinter中如何利用下拉框来调用另一文件中的函数?

我的想法是利用下拉框来调用另一文件中的函数

先放上调用函数与函数在一个文件的代码

from tkinter import *                   # 大致意思是当下拉框选择‘3’时,生成3个输入框
from tkinter.ttk import *               #          当下拉框选择‘4’时,生成4个下拉框
                                        #  这是a.py 文件
def choose(self):
    global but
    if var.get() =='4':
        but=Entry(root)
        but.place(relx=0.67, rely=0.41, relheight=0.06, relwidth=0.2)
    else:
        but.destroy()

root = Tk()
root.geometry('380x380')
Entry(root).place(relx=0.01, rely=0.41, relheight=0.06, relwidth=0.2)
Entry(root).place(relx=0.23, rely=0.41, relheight=0.06, relwidth=0.2)
Entry(root).place(relx=0.45, rely=0.41, relheight=0.06, relwidth=0.2)

var = StringVar()
comb = Combobox(root, textvariable=var, values=['3', '4'])  # 下拉框 只有3和4
comb.current(0)
comb.place(relx=0.23, rely=0.35, relheight=0.06, relwidth=0.2)
comb.bind('<<ComboboxSelected>>',choose)

root.mainloop()

 现在把函数和主程序分开

from tkinter import *                     # 这是a.py
from tkinter.ttk import *
from b import choose
root = Tk()
root.geometry('380x380')
Entry(root).place(relx=0.01, rely=0.41, relheight=0.06, relwidth=0.2)
Entry(root).place(relx=0.23, rely=0.41, relheight=0.06, relwidth=0.2)
Entry(root).place(relx=0.45, rely=0.41, relheight=0.06, relwidth=0.2)

var = StringVar()
comb = Combobox(root, textvariable=var, values=['3', '4'])  # 下拉框 只有3和4
comb.current(0)
comb.place(relx=0.23, rely=0.35, relheight=0.06, relwidth=0.2)
comb.bind('<<ComboboxSelected>>',choose('<<ComboboxSelected>>',var,root))
                              #上面这行我不会写,是错的,但我不会改
root.mainloop()
from tkinter import *                      # 这是b.py

def choose(event,var,root):
    global but
    if var.get() =='4':
        but=Entry(root)
        but.place(relx=0.67, rely=0.41, relheight=0.06, relwidth=0.2)
    else:
        if var.get() =='3':
            but.destroy()

结果就是调用函数调用不了,哪位大佬知道怎么做,能帮我改改吗?

  • 写回答

1条回答 默认 最新

  • Smart-Space 2021-08-26 16:48
    关注

    a.py文件的第14行,改为:

    comb.bind('<<ComboboxSelected>>',lambda event=event,var=var,root=root:choose(event,var,root))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误