【问题标题】:How to add buttons along side a grid in TKinter如何在 TKinter 中沿网格添加按钮
【发布时间】:2015-02-07 02:37:48
【问题描述】:

我正在为 TKinter 中的游戏创建一个网格,我希望在蓝色瓷砖网格下方或旁边有按钮。我已经试过了:

from tkinter import *

class BattleScreen(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)
        self.grid()

        for row in range(20):
           for col in range(20):
                butt1 = Button(self, bg='blue', width=1)
                butt1.grid(row=row, column=col)

        #self.but_frame = Frame(self)
        #self.but_frame.pack(fill=X)
        button1 = Button(self, text='Quit', width=6, command=lambda root=root:root.destroy())
        button1.grid(row=21)


root = Tk()
sheet = BattleScreen(root)
root.mainloop()

当它运行时,它会在蓝色图块下方创建按钮,但由于它们都在同一个网格上并且按钮更宽,它会弄乱按钮上方的所有内容。

您看到的被注释掉的两行代码是我尝试创建另一个与网格框架分开的框架来放置按钮,但我想您不能这样做。我错了吗?

如何在网格中的蓝色图块下方或旁边获取按钮,而不会弄乱蓝色图块的对齐方式?

【问题讨论】:

  • 是战列舰吗

标签: python button python-3.x tkinter grid


【解决方案1】:

对我来说,最简单的做法是使用两个框架 - 一个用于按钮网格,一个用于其他按钮。然后,您可以从上到下将这些并排打包。然后,将 grid 用于按钮网格,并将 grid 或 pack 用于其他按钮。

这样,网格和按钮在逻辑上是截然不同的,您可以将它们分别布置,而不必担心它们如何影响显示的其余部分。这使您的程序更加更容易维护和随着时间的推移而发展。

请注意,在下文中,我从BattleScreen 中删除了self.grid()——我认为将框架置于其父级中是一种不好的做法。父母应该控制放置。

from tkinter import *

class BattleScreen(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)

        for row in range(20):
           for col in range(20):
                butt1 = Button(self, bg='blue', width=1)
                butt1.grid(row=row, column=col)


class Controls(Frame):
    def __init__(self, root):
        Frame.__init__(self, root)
        self.quit = Button(self, text="Quit", width=6, 
                           command=root.destroy)
        self.quit.pack()

root = Tk()
screen = BattleScreen(root)
controls = Controls(root)
controls.pack(side="bottom", fill="x")
screen.pack(side="top", fill="both", expand=True)
root.mainloop()

【讨论】:

    【解决方案2】:

    使用columnspan option 使按钮单元跨越多列:

    button1.grid(row=20, columnspan=20)
    

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2014-07-15
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多