鱼C论坛

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

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

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

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

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

x
本帖最后由 dragov 于 2024-10-28 17:28 编辑
from tkinter import *
root=Tk()
m=[{"designation":"北京万泉河","aspect":"hourglass"},{"designation":"天津海河","aspect":"error"},{"designation":"退出按钮","aspect":"info"}]
def tj():
      p=Toplevel(root)
      Button(p,text="这是天津的标签!").pack()
def bj():
      q=Toplevel(root)
      Button(q,text="这是北京的标签!").pack()
def secede():
      root.destroy()
for i in range(len(m)):
      n=Button(root,text=m[i]["designation"],bitmap=m[i]["aspect"],compound="bottom")
      n.pack()
      if "天津" in m[i]["designation"] :
            n.config(command=tj)
      if "北京" in m[i]["designation"] :
            n.config(command=bj)
      if "退出" in m[i]["designation"] :
            n.config(command=root.destroy)
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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

root = Tk()

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

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

mainloop()

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

root = Tk()

您给出的这个程序,好似不行的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 18:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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