鱼C论坛

 找回密码
 立即注册
查看: 557|回复: 8

[已解决]Tkinter

[复制链接]
发表于 2024-7-1 16:07:38 | 显示全部楼层 |阅读模式

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

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

x

  1. from tkinter import *
  2. root=Tk()
  3. a=[{"name":"北京","position":"n"},
  4.    {"name":"天津","position":"s"},
  5.    {"name":"上海","position":"e"},
  6.    {"name":"重庆","position":"w"},
  7.    {"name":"退出","position":"center"}]
  8. def gyl():
  9.         for i in range(len(a)) :
  10.                 b=Button(root,
  11.                          text=a[i]["name"],
  12.                          anchor=a[i]["position"],
  13.                          width=34,
  14.                          height=8,
  15.                          relief="groove",
  16.                          borderwidth=7,
  17.                          font="汉仪雪峰体简 13 bold",
  18.                          background="cornsilk",
  19.                          foreground="limegreen")
  20.                 b.pack(expand=True)
  21. gyl()
  22. mainloop()
复制代码


这个程序运行后,生成5个按钮,分别为:北京、天津、上海、重庆和退出。

我想:生成2个按钮,前4个放置在一个按钮中,退出为一个按钮,如图所示。

最佳答案
2024-8-1 18:20:14
只能分成多个按钮。一个按钮只能绑定一个函数
无标题.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-7-1 16:07:50 | 显示全部楼层
哈哈,这个任务听起来挺有趣呀!我们来一步步解决这个问题。你的要求是生成两个按钮,其中一个按钮包含 "北京"、"天津"、"上海" 和 "重庆",另一个按钮是 "退出"。

首先,我们需要创建一个包含前四个城市的按钮,然后再创建一个“退出”按钮。为了将前四个城市放在一个按钮上,我们可以把这些城市名拼接成一个字符串。

以下是修改后的代码:

  1. from tkinter import *

  2. # 初始化Tk对象
  3. root = Tk()

  4. # 定义包含城市的列表
  5. a = ["北京", "天津", "上海", "重庆"]

  6. def gyl():
  7.     # 第一个按钮,包含前四个城市
  8.     cities_text = ", ".join(a)  # 把城市名拼接成一个字符串,用逗号分隔
  9.     b1 = Button(root,
  10.                 text=cities_text,  # 使用拼接的城市名作为按钮文本
  11.                 anchor="center",
  12.                 width=34,
  13.                 height=8,
  14.                 relief="groove",
  15.                 borderwidth=7,
  16.                 font="汉仪雪峰体简 13 bold",
  17.                 background="cornsilk",
  18.                 foreground="limegreen")
  19.     b1.pack(expand=True)

  20.     # 第二个按钮,退出按钮
  21.     b2 = Button(root,
  22.                 text="退出",
  23.                 anchor="center",
  24.                 width=34,
  25.                 height=8,
  26.                 relief="groove",
  27.                 borderwidth=7,
  28.                 font="汉仪雪峰体简 13 bold",
  29.                 background="cornsilk",
  30.                 foreground="limegreen",
  31.                 command=root.quit)  # 点击按钮退出程序
  32.     b2.pack(expand=True)

  33. # 调用函数生成按钮
  34. gyl()

  35. # 进入主循环
  36. mainloop()
复制代码


这样,我们就能生成两个按钮,一个按钮包含前四个城市的名字,另一个按钮是“退出”按钮。这种方式简单直接,效果也不错,希望你喜欢这个解决方案!

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

使用道具 举报

 楼主| 发表于 2024-7-1 16:13:42 | 显示全部楼层
FishC 发表于 2024-7-1 16:07
哈哈,这个任务听起来挺有趣呀!我们来一步步解决这个问题。你的要求是生成两个按钮,其中一个按钮包含 "北 ...

生成的第一个按钮中【北京】【天津】【上海】【重庆】所处的位置不对呀 ?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-1 16:14:06 | 显示全部楼层
dragov 发表于 2024-07-01 16:13
bg4.png
生成的第一个按钮中【北京】【天津】【上海 ...


哈哈,我懂了,你是希望四个城市名在按钮中能更好地展示对吧?要让这些城市名在按钮中有更好的布局,我们可以使用换行符 `\n` 来分隔每个城市名,这样它们就能垂直排列了。

以下是修改后的代码:

  1. from tkinter import *

  2. # 初始化Tk对象
  3. root = Tk()

  4. # 定义包含城市的列表
  5. a = ["北京", "天津", "上海", "重庆"]

  6. def gyl():
  7.     # 第一个按钮,包含前四个城市,每个城市名用换行符分隔
  8.     cities_text = "\n".join(a)  # 把城市名用换行符分隔
  9.     b1 = Button(root,
  10.                 text=cities_text,  # 使用拼接的城市名作为按钮文本
  11.                 anchor="center",
  12.                 width=34,
  13.                 height=8,
  14.                 relief="groove",
  15.                 borderwidth=7,
  16.                 font="汉仪雪峰体简 13 bold",
  17.                 background="cornsilk",
  18.                 foreground="limegreen")
  19.     b1.pack(expand=True)

  20.     # 第二个按钮,退出按钮
  21.     b2 = Button(root,
  22.                 text="退出",
  23.                 anchor="center",
  24.                 width=34,
  25.                 height=8,
  26.                 relief="groove",
  27.                 borderwidth=7,
  28.                 font="汉仪雪峰体简 13 bold",
  29.                 background="cornsilk",
  30.                 foreground="limegreen",
  31.                 command=root.quit)  # 点击按钮退出程序
  32.     b2.pack(expand=True)

  33. # 调用函数生成按钮
  34. gyl()

  35. # 进入主循环
  36. mainloop()
复制代码


这样,四个城市名就会在第一个按钮中垂直排列。希望这次的布局符合你的要求!如果还有其他调整需求,尽管告诉我哦!

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

使用道具 举报

 楼主| 发表于 2024-7-1 16:22:50 | 显示全部楼层
FishC 发表于 2024-7-1 16:14
哈哈,我懂了,你是希望四个城市名在按钮中能更好地展示对吧?要让这些城市名在按钮中有更好的布局,我 ...


生成的第一个按钮中【北京】【天津】【上海】【重庆】所处的位置不对 !

【北京】位于按钮的顶部中间位置


【天津】位于按钮的底部中间位置

【上海】位于按钮的右边中间位置

【重庆】位于按钮的左边中间位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-1 16:23:22 | 显示全部楼层
dragov 发表于 2024-07-01 16:22
bg4.png

生成的第一个按钮中【北京】【天津】【上 ...


哈哈,明白了,你希望将每个城市名放置在按钮的特定位置:北京在顶部中间,天津在底部中间,上海在右边中间,重庆在左边中间。为实现这种布局,我们可以使用 `place` 方法来精确定位每个城市名的标签。

下面是具体实现的代码:

  1. from tkinter import *

  2. # 初始化Tk对象
  3. root = Tk()
  4. root.geometry("400x400")  # 设置窗口大小

  5. def gyl():
  6.     # 创建一个Frame来容纳城市标签
  7.     frame = Frame(root, width=200, height=200, relief="groove", borderwidth=7, background="cornsilk")
  8.     frame.pack(expand=True)

  9.     # 创建并放置每个城市的Label
  10.     label_bj = Label(frame, text="北京", font="汉仪雪峰体简 13 bold", background="cornsilk", foreground="limegreen")
  11.     label_bj.place(relx=0.5, rely=0, anchor='n')  # 北京在顶部中间

  12.     label_tj = Label(frame, text="天津", font="汉仪雪峰体简 13 bold", background="cornsilk", foreground="limegreen")
  13.     label_tj.place(relx=0.5, rely=1, anchor='s')  # 天津在底部中间

  14.     label_sh = Label(frame, text="上海", font="汉仪雪峰体简 13 bold", background="cornsilk", foreground="limegreen")
  15.     label_sh.place(relx=1, rely=0.5, anchor='e')  # 上海在右边中间

  16.     label_cq = Label(frame, text="重庆", font="汉仪雪峰体简 13 bold", background="cornsilk", foreground="limegreen")
  17.     label_cq.place(relx=0, rely=0.5, anchor='w')  # 重庆在左边中间

  18.     # 创建退出按钮
  19.     exit_button = Button(root,
  20.                          text="退出",
  21.                          anchor="center",
  22.                          width=34,
  23.                          height=8,
  24.                          relief="groove",
  25.                          borderwidth=7,
  26.                          font="汉仪雪峰体简 13 bold",
  27.                          background="cornsilk",
  28.                          foreground="limegreen",
  29.                          command=root.quit)  # 点击按钮退出程序
  30.     exit_button.pack(expand=True)

  31. # 调用函数生成按钮
  32. gyl()

  33. # 进入主循环
  34. mainloop()
复制代码


在这个代码中,我们使用了一个 `Frame` 来容纳城市标签,并用 `place` 方法在框架内精确定位每个城市名。这样你就能得到一个按钮框架,其中城市名按你指定的位置排列。希望这个方案符合你的要求!

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

使用道具 举报

 楼主| 发表于 2024-7-1 17:31:15 | 显示全部楼层
FishC 发表于 2024-7-1 16:23
哈哈,明白了,你希望将每个城市名放置在按钮的特定位置:北京在顶部中间,天津在底部中间,上海在右边 ...


要求在按钮中来实现!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-1 17:31:51 | 显示全部楼层
dragov 发表于 2024-07-01 17:31
bg4.png

要求在按钮中来实现!


明白了,你希望在单个按钮中实现城市名的特定布局。由于按钮本身不支持在内部精确放置多个控件,我们可以使用一种“变通”的方法:在按钮的文本中插入特定位置的空格和换行符来大致实现这种效果。

尽管这种方法可能没有完全精确的布局,但它可以近似地达到你的要求。下面是修改后的代码:

  1. from tkinter import *

  2. # 初始化Tk对象
  3. root = Tk()
  4. root.geometry("400x400")  # 设置窗口大小

  5. # 定义包含城市的列表
  6. a = ["北京", "天津", "上海", "重庆"]

  7. def gyl():
  8.     # 在按钮文本中设置城市名的近似位置
  9.     button_text = "北京\n\n\n重庆\t\t\t上海\n\n\n天津"
  10.     b1 = Button(root,
  11.                 text=button_text,
  12.                 anchor="center",
  13.                 width=34,
  14.                 height=8,
  15.                 relief="groove",
  16.                 borderwidth=7,
  17.                 font="汉仪雪峰体简 13 bold",
  18.                 background="cornsilk",
  19.                 foreground="limegreen")
  20.     b1.pack(expand=True)

  21.     # 第二个按钮,退出按钮
  22.     b2 = Button(root,
  23.                 text="退出",
  24.                 anchor="center",
  25.                 width=34,
  26.                 height=8,
  27.                 relief="groove",
  28.                 borderwidth=7,
  29.                 font="汉仪雪峰体简 13 bold",
  30.                 background="cornsilk",
  31.                 foreground="limegreen",
  32.                 command=root.quit)  # 点击按钮退出程序
  33.     b2.pack(expand=True)

  34. # 调用函数生成按钮
  35. gyl()

  36. # 进入主循环
  37. mainloop()
复制代码


在这个代码中,我们通过在按钮文本中使用换行符 (`\n`) 和制表符 (`\t`) 来大致控制每个城市名的位置。虽然这并不是精确的定位,但在一定程度上可以实现你所描述的布局效果。如果有更高的布局精度需求,可能需要使用其他GUI工具或更复杂的实现方法。希望这个方案能满足你的要求!

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

使用道具 举报

发表于 2024-8-1 18:20:14 | 显示全部楼层    本楼为最佳答案   
只能分成多个按钮。一个按钮只能绑定一个函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 14:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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