开发者社区> 问答> 正文

防止在tkinter中添加文本时调整按钮的大小

我在tkinter上做了一个tic tac toe游戏。 代码如下:

from tkinter import *

index = 0

def play_again():
    print("TO DO IMPLEMENT IT!")


def update(button_tekst):
    global index
    if index % 2 == 0 and button_tekst.get() == "":
        button_tekst.set("X")
        index += 1
    if index % 2 and button_tekst.get() == "":
        button_tekst.set("O")
        index += 1




def main():

    window = Tk()

    window.title("Tic tac toe")
    window.geometry("400x400")

    window.grid_columnconfigure((0,1,2), weight=1)
    window.grid_rowconfigure((1, 2, 3), weight=2)
    window.grid_rowconfigure(0, weight=1)

    again = Button(window, text="Play again", bg="lightskyblue", fg='white', font=30, command=play_again)
    again.grid(row=0, columnspan=3, sticky="ewns")

    coordinaten = [[1, 0], [1, 1], [1, 2], [2, 0],
                   [2, 1], [2, 2], [3, 0], [3, 1], [3, 2]]

    texten = [StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar(), StringVar()]

    for i in range(len(coordinaten)):
        button = Button(window, textvariable=texten[i], font=("Helvetica", "30"),  command=lambda current_index = i:update(texten[current_index]))
        button.grid(row=coordinaten[i][0], column=coordinaten[i][1], sticky="ewns")

    window.mainloop()


main()

然而,当我点击一个按钮,文本显示,但按钮自动调整大小。 我该如何预防呢? 此外,是否有必要使用全局索引(或布尔值)var和7 Stringvar var ? 问题来源StackOverflow 地址:/questions/59379223/prevent-resize-buttons-when-adding-text-in-tkinter

展开
收起
kun坤 2019-12-30 09:36:53 534 0
1 条回答
写回答
取消 提交回答
  • 使用比例字体时,字符串的总宽度取决于其内容。当几何管理器根据其内容的当前大小调整每个小部件的大小时,您可能会观察到您所谈论的烦恼的类型。幸运的是,解决方案很简单:简单地为你的按钮小部件指定一个恒定的“宽度”属性:

        button = Button(window, width=3, textvariable=texten[i], ...)
    

    编辑:关于你其他问题: 您可以直接操作按钮部件的“文本”属性。此外,通过将9个按钮存储到按单元格坐标(i,j)索引的字典中, 你的更新功能变得更简单:

    from tkinter import *
    
    def play_again():
        print("TO DO IMPLEMENT IT!")
    
    def update(grid, i, j):
        global index
        grid[i,j]['text'] = 'XO'[index] # select either 'X' or 'O'
        index = 1 - index
    
    def main():
        global index
        font = ("Helvetica", "30")
        index = 0
    
        window = Tk()
        window.title("Tic tac toe")
        window.geometry("400x400")
    
        window.grid_columnconfigure((0,1,2), weight=1)
        window.grid_rowconfigure((1, 2, 3), weight=2)
        window.grid_rowconfigure(0, weight=1)
    
        again = Button(window, text="Play again", bg="lightskyblue", fg='white',
                       font=font, command=play_again)
        again.grid(row=0, columnspan=3, sticky="ewns")
    
        grid = {} # store Button widgets into a dictionary indexed by cell coords
        for i in range(3):
          for j in range(3):
            grid[i,j] = Button(window, width=3, text='', font=font,
                               command=lambda i=i,j=j: update(grid, i, j))
            grid[i,j].grid(row=i+1, column=j, sticky="ewns")
    
        window.mainloop()
    
    main()
    
    2019-12-30 09:36:59
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多