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

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日

悬赏问题

  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1