dragov 发表于 2024-7-1 16:07:38

Tkinter



from tkinter import *
root=Tk()
a=[{"name":"北京","position":"n"},
   {"name":"天津","position":"s"},
   {"name":"上海","position":"e"},
   {"name":"重庆","position":"w"},
   {"name":"退出","position":"center"}]
def gyl():
      for i in range(len(a)) :
                b=Button(root,
                         text=a["name"],
                         anchor=a["position"],
                         width=34,
                         height=8,
                         relief="groove",
                         borderwidth=7,
                         font="汉仪雪峰体简 13 bold",
                         background="cornsilk",
                         foreground="limegreen")
                b.pack(expand=True)
gyl()
mainloop()

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

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

FishC 发表于 2024-7-1 16:07:50

哈哈,这个任务听起来挺有趣呀!我们来一步步解决这个问题。你的要求是生成两个按钮,其中一个按钮包含 "北京"、"天津"、"上海" 和 "重庆",另一个按钮是 "退出"。

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

以下是修改后的代码:

from tkinter import *

# 初始化Tk对象
root = Tk()

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

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

    # 第二个按钮,退出按钮
    b2 = Button(root,
                text="退出",
                anchor="center",
                width=34,
                height=8,
                relief="groove",
                borderwidth=7,
                font="汉仪雪峰体简 13 bold",
                background="cornsilk",
                foreground="limegreen",
                command=root.quit)# 点击按钮退出程序
    b2.pack(expand=True)

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

# 进入主循环
mainloop()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

dragov 发表于 2024-7-1 16:13:42

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


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

FishC 发表于 2024-7-1 16:14:06

dragov 发表于 2024-07-01 16:13
bg4.png
生成的第一个按钮中【北京】【天津】【上海 ...

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

以下是修改后的代码:

from tkinter import *

# 初始化Tk对象
root = Tk()

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

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

    # 第二个按钮,退出按钮
    b2 = Button(root,
                text="退出",
                anchor="center",
                width=34,
                height=8,
                relief="groove",
                borderwidth=7,
                font="汉仪雪峰体简 13 bold",
                background="cornsilk",
                foreground="limegreen",
                command=root.quit)# 点击按钮退出程序
    b2.pack(expand=True)

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

# 进入主循环
mainloop()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

dragov 发表于 2024-7-1 16:22:50

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



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

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

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

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

【重庆】位于按钮的左边中间位置

FishC 发表于 2024-7-1 16:23:22

dragov 发表于 2024-07-01 16:22
bg4.png

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

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

下面是具体实现的代码:

from tkinter import *

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

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

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

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

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

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

    # 创建退出按钮
    exit_button = Button(root,
                         text="退出",
                         anchor="center",
                         width=34,
                         height=8,
                         relief="groove",
                         borderwidth=7,
                         font="汉仪雪峰体简 13 bold",
                         background="cornsilk",
                         foreground="limegreen",
                         command=root.quit)# 点击按钮退出程序
    exit_button.pack(expand=True)

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

# 进入主循环
mainloop()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

dragov 发表于 2024-7-1 17:31:15

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



要求在按钮中来实现!

FishC 发表于 2024-7-1 17:31:51

dragov 发表于 2024-07-01 17:31
bg4.png

要求在按钮中来实现!

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

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

from tkinter import *

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

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

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

    # 第二个按钮,退出按钮
    b2 = Button(root,
                text="退出",
                anchor="center",
                width=34,
                height=8,
                relief="groove",
                borderwidth=7,
                font="汉仪雪峰体简 13 bold",
                background="cornsilk",
                foreground="limegreen",
                command=root.quit)# 点击按钮退出程序
    b2.pack(expand=True)

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

# 进入主循环
mainloop()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2024-8-1 18:20:14

只能分成多个按钮。一个按钮只能绑定一个函数
页: [1]
查看完整版本: Tkinter