鱼C论坛

 找回密码
 立即注册
查看: 475|回复: 3

[已解决]Tkinter 中的3个 if 语句,怎么修改 ?

[复制链接]
发表于 2024-10-28 16:39:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 dragov 于 2024-10-28 17:28 编辑
  1. from tkinter import *
  2. root=Tk()
  3. m=[{"designation":"北京万泉河","aspect":"hourglass"},{"designation":"天津海河","aspect":"error"},{"designation":"退出按钮","aspect":"info"}]
  4. def tj():
  5.       p=Toplevel(root)
  6.       Button(p,text="这是天津的标签!").pack()
  7. def bj():
  8.       q=Toplevel(root)
  9.       Button(q,text="这是北京的标签!").pack()
  10. def secede():
  11.       root.destroy()
  12. for i in range(len(m)):
  13.       n=Button(root,text=m[i]["designation"],bitmap=m[i]["aspect"],compound="bottom")
  14.       n.pack()
  15.       if "天津" in m[i]["designation"] :
  16.             n.config(command=tj)
  17.       if "北京" in m[i]["designation"] :
  18.             n.config(command=bj)
  19.       if "退出" in m[i]["designation"] :
  20.             n.config(command=root.destroy)
  21. mainloop()
复制代码


在程序体中的 3 个 if 语句,使用起来有些别扭,怎么修改呢 ?
最佳答案
2024-10-28 17:32:59
from tkinter import *

root = Tk()
m = [
    {"designation": "北京万泉河", "aspect": "hourglass"},
    {"designation": "天津海河", "aspect": "error"},
    {"designation": "退出按钮", "aspect": "info"}
]

def on_button_click(button_text):
    if "天津" in button_text:
        tj()
    elif "北京" in button_text:
        bj()
    elif "退出" in button_text:
        secede()

def tj():
    p = Toplevel(root)
    Button(p, text="这是天津的标签!").pack()

def bj():
    q = Toplevel(root)
    Button(q, text="这是北京的标签!").pack()

def secede():
    root.destroy()

for item in m:
    n = Button(root, text=item["designation"], bitmap=item["aspect"], compound="bottom")
    n.pack()
    n.config(command=lambda: on_button_click(item["designation"]))

root.mainloop()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 16:39:59 | 显示全部楼层
你可以使用字典来优化按钮和对应命令的映射,从而简化代码。下面是一个重构示例:

  1. from tkinter import *

  2. root = Tk()

  3. # 修改为一个包含按钮标签和对应函数的字典
  4. buttons = {
  5.     "天津": tj,
  6.     "北京": bj,
  7.     "退出": secede
  8. }

  9. # 创建按钮并绑定相应的命令
  10. for label, command in buttons.items():
  11.     n = Button(root, text=label, command=command)
  12.     n.pack()

  13. mainloop()
复制代码


确保`tj`、`bj`和`secede`函数在`buttons`字典之前定义。

这样,代码会更清晰易读,方便维护。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-28 17:32:59 | 显示全部楼层    本楼为最佳答案   
from tkinter import *

root = Tk()
m = [
    {"designation": "北京万泉河", "aspect": "hourglass"},
    {"designation": "天津海河", "aspect": "error"},
    {"designation": "退出按钮", "aspect": "info"}
]

def on_button_click(button_text):
    if "天津" in button_text:
        tj()
    elif "北京" in button_text:
        bj()
    elif "退出" in button_text:
        secede()

def tj():
    p = Toplevel(root)
    Button(p, text="这是天津的标签!").pack()

def bj():
    q = Toplevel(root)
    Button(q, text="这是北京的标签!").pack()

def secede():
    root.destroy()

for item in m:
    n = Button(root, text=item["designation"], bitmap=item["aspect"], compound="bottom")
    n.pack()
    n.config(command=lambda: on_button_click(item["designation"]))

root.mainloop()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-10-31 16:57:04 | 显示全部楼层
很cool的阳 发表于 2024-10-28 17:32
from tkinter import *

root = Tk()

您给出的这个程序,好似不行的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 03:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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