鱼C论坛

 找回密码
 立即注册
查看: 2132|回复: 1

tkinter.Button command绑定函数操作求解

[复制链接]
发表于 2020-1-5 14:01:32 | 显示全部楼层 |阅读模式
50鱼币
各位大佬,小弟在初学tkinter时碰到个问题,button组件关联的函数有多个动作的时候,或者说用户点了button之后的页面又有button,就变成函数里面套函数了,总感觉这样的写法不太对,请问有没有更简洁明了的方法呢?下面是我的button又button,函数套函数的写法:
未命名文件.jpg
微信截图_20200105115417.jpg
另外顺便问下messagbox的弹出窗口如何固定位置在父窗口上,而不是屏幕中央的位置呢?

  1. from tkinter import *
  2. from tkinter.messagebox import *

  3. root = Tk()
  4. text = Text(root)
  5. text.pack()
  6. text.insert(INSERT, '这是主窗口,用户在此窗口上点确定后弹窗开始选择数字,选定点确定关闭弹窗,并获得值')

  7. def firstfunc():
  8.     top = Toplevel(root)
  9.     s = Scale(top, from_=11, to=42)
  10.     s.pack()
  11.    
  12.     def secondfunc_in_firstfunc(s):
  13.         if askyesno('提示', '这个窗口用于获取用户选定的值'):
  14.             s = s.get()
  15.             top.destroy()
  16.             text.delete('1.0',END)
  17.             text.insert(INSERT, '这是第二个函数,取得刚才用户选择的值:' + str(s))
  18.             a = 10
  19.             if s > a: #如果用户选择的值大于某个参数,再弹窗,问用户是否执行某个操作
  20.                 if askyesno('又弹窗','点确定执行下一步操作'):
  21.                     top2 = Toplevel(root)

  22.                     def thirdfun_in_secondfunc():
  23.                         top2.destroy()
  24.                         text.delete('1.0', END)
  25.                         text.insert(INSERT, '这是第三个函数,因为您选择的值大于%d而启动' %a)
  26.                     Button(top2,text='执行又一个函数', command=thirdfun_in_secondfunc).pack()
  27.     Button(top, text='确定后,函数关闭此窗口,并获得选定的值', command=lambda: secondfunc_in_firstfunc(s)).pack()


  28. Button(root, text='确定', command=firstfunc).pack()
  29. mainloop()
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-5 22:24:19 | 显示全部楼层
想到了一个曲线救国的办法,期待大神出手。。。
  1. from tkinter import *
  2. from tkinter.messagebox import *

  3. root = Tk()
  4. text = Text(root)
  5. text.pack()
  6. text.insert(INSERT, '这是主窗口,用户在此窗口上点确定后弹窗开始选择数字,选定点确定关闭弹窗,并获得值')
  7. top = Toplevel(root)
  8. top.withdraw()
  9. top2 = Toplevel(root)
  10. top2.withdraw()
  11. a = 10

  12. def firstfunc():
  13.     top.deiconify()
  14.     s = Scale(top, from_=11, to=42)
  15.     s.pack()
  16.     Button(top, text='确定后,函数关闭此窗口,并获得选定的值', command=lambda: secondfunc_in_firstfunc(s)).pack()

  17. def secondfunc_in_firstfunc(s):
  18.     if askyesno('提示', '这个窗口用于获取用户选定的值'):
  19.         s = s.get()
  20.         top.destroy()
  21.         text.delete('1.0',END)
  22.         text.insert(INSERT, '这是第二个函数,取得刚才用户选择的值:' + str(s))
  23.         if s > a: #如果用户选择的值大于某个参数,再弹窗,问用户是否执行某个操作
  24.             if askyesno('又弹窗','点确定执行下一步操作'):
  25.                 top2.deiconify()
  26.                 Button(top2,text='执行又一个函数', command=thirdfun_in_secondfunc).pack()


  27. def thirdfun_in_secondfunc():
  28.     top2.destroy()
  29.     text.delete('1.0', END)
  30.     text.insert(INSERT, '这是第三个函数,因为您选择的值大于%d而启动' %a)


  31. Button(root, text='确定', command=firstfunc).pack()
  32. mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-27 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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