求教ttk的combobox问题,如何将下拉列表选中的值返回

GGGYJJJ 2018-04-22 10:45:21
代码如下:

import tkinter
from tkinter import ttk
def drawset():
window4 = tkinter.Tk()
window4.title('Parameters set of system')
#图像类型选择
tkinter.Label(window4,text = 'Type of the picture:').grid(row=1,column=1,sticky='W')
figure = tkinter.StringVar()
global allfiguretype
allfiguretype = ttk.Combobox(window4,textvariable=figure,state='readonly')
allfiguretype.grid(row=1,column=2)
allfiguretype["values"] = ("Line", "Scatter")
allfiguretype.current(0)
# allfiguretype.bind("<<ComboboxSelected>>", figuretypesetCallback)
window4.mainloop()
return allfiguretype.get()

if __name__ == '__main__':

q = drawset()
print(q)

想要得到下拉列表的一个返回值,因为要通过这个返回值对程序设置参数,但是一直报错,网上资料也少,请各位大牛帮忙看看!
...全文
1069 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
GGGYJJJ 2018-04-25
  • 打赏
  • 举报
回复
引用 5 楼 seakingx 的回复:
因为在window4.mainloop() 结束时 window4 已经销毁了。 也就没有列表了。对象不存在, 所以返回不了值。
大兄弟,能不能帮我解决一下最新的问题呀,一直搞不明白
GGGYJJJ 2018-04-23
  • 打赏
  • 举报
回复
GGGYJJJ 2018-04-23
  • 打赏
  • 举报
回复
引用 5 楼 seakingx 的回复:
因为在window4.mainloop() 结束时 window4 已经销毁了。 也就没有列表了。对象不存在, 所以返回不了值。
真是万分感谢,帮我及时解决了这个问题!!!
陈年椰子 2018-04-23
  • 打赏
  • 举报
回复
因为在window4.mainloop() 结束时 window4 已经销毁了。 也就没有列表了。对象不存在, 所以返回不了值。
GGGYJJJ 2018-04-23
  • 打赏
  • 举报
回复
引用 3 楼 seakingx 的回复:
需要响应选择事件。试试这样。

import tkinter
from tkinter import ttk
return_val = "Line"

def drawset():
    window4 = tkinter.Tk()
    window4.title('Parameters set of system')

    # 列表事件
    def show_msg(*args):
        global return_val
        return_val = allfiguretype.get()

    
    # 图像类型选择
    tkinter.Label(window4, text='Type of the picture:').grid(row=1, column=1, sticky='W')
    figure = tkinter.StringVar()
    # global allfiguretype
    allfiguretype = ttk.Combobox(window4, textvariable=figure, state='readonly')
    allfiguretype.grid(row=1, column=2)
    allfiguretype["values"] = ("Line", "Scatter")
    allfiguretype.current(0)
    allfiguretype.bind("<<ComboboxSelected>>", show_msg)
    
    window4.mainloop()
    return return_val


if __name__ == '__main__':
    q = drawset()
    print(q)
哇!真的解决了,太谢谢了,我之前也试过这种方法,但是都不成功,是因为我把global的初始化放在函数里了,并没有放到函数外,因此要么报错,要么global的值无法更新,实在太感谢了!但是还是有个问题,就是为什么一定要添加列表相应函数才能使用.get()函数,直接return为何会报错?
陈年椰子 2018-04-23
  • 打赏
  • 举报
回复
需要响应选择事件。试试这样。

import tkinter
from tkinter import ttk
return_val = "Line"

def drawset():
    window4 = tkinter.Tk()
    window4.title('Parameters set of system')

    # 列表事件
    def show_msg(*args):
        global return_val
        return_val = allfiguretype.get()

    
    # 图像类型选择
    tkinter.Label(window4, text='Type of the picture:').grid(row=1, column=1, sticky='W')
    figure = tkinter.StringVar()
    # global allfiguretype
    allfiguretype = ttk.Combobox(window4, textvariable=figure, state='readonly')
    allfiguretype.grid(row=1, column=2)
    allfiguretype["values"] = ("Line", "Scatter")
    allfiguretype.current(0)
    allfiguretype.bind("<<ComboboxSelected>>", show_msg)
    
    window4.mainloop()
    return return_val


if __name__ == '__main__':
    q = drawset()
    print(q)
GGGYJJJ 2018-04-22
  • 打赏
  • 举报
回复
很急啊,有没有大牛呀- - 毕设卡在这里出不去了

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧