如何在一个非常特殊的地方放置按钮?

2024-06-11 12:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用坐标之类的东西来放置按钮。我试过使用pack和grid。如果使用网格或确定每列/行的大小,我希望能够喜欢跳过列。每次数字加上一个额外的数字,它就会按下按钮,让它看起来很奇怪。有什么办法可以避免吗?如果有办法继续使用网格或打包并修复我的问题,我会怎么做

#Date: November 25, 2015
#FIle: TestingStatsGUI.py

import tkinter as tk

class PickStats(tk.Frame):
    health_attr = 0
    health = 90
    energy = 45
    energy_attr = 0
    def __init__(self, master):
        tk.Frame.__init__(self, master, background="Black")
        tk.activeforeground= "blak"
        master = master
        self.init_window()

    def init_window(self):
        self.master.title("Player")
        root.geometry("850x550")
        self.pack(fill="both", expand=1)


        self.update_window()

    def update_window(self):
        self.healthAdd = tk.Button(self, text="+", font= 13, fg='white', bg='#000080',
                                   width = 2,
                                   command=lambda: self.update("addHealth"))
        self.healthSub = tk.Button(self, text="--", font=13, fg='white', bg='red',
                                   width = 2,
                                   command=lambda: self.update("subHealth"))
        self.HealthTotal = tk.Label(self, text="Health: {}".format(self.health),
                                   font=15, fg='#01ffff', bg='black')
        self.healthAdd.config(height = 0)
        self.HealthTotal.grid(row=1, column=0, columnspan=3)
        self.healthAdd.grid(row=1, column=10, padx=6)
        self.healthSub.grid(row=1, column=20)


    def update(self, method):
        if method == "addHealth":
            self.health_attr += 1
        elif method == "subHealth":
            if self.health_attr <= 0:
                pass
            else:
                self.health_attr -= 1
        self.health = 90 + self.health_attr*4
        self.update_window()
        print(self.health)


root = tk.Tk()
app = PickStats(root)
root.mainloop()

Tags: textselfmasterinitdefupdaterootwindow
1条回答
网友
1楼 · 发布于 2024-06-11 12:17:27

要解决按钮被推倒的具体问题,只需给标签足够的空间来扩展。例如,您只需更改一行,如下所示:

self.HealthTotal = tk.Label(..., width=16)

你的代码中有一个严重的错误,每次按下按钮你都会创建越来越多的小部件。只需创建一次小部件。从那时起,您可以用一条语句更改显示的值

例如:

def init_window(self):
    self.master.title("Player")
    root.geometry("850x550")
    self.pack(fill="both", expand=1)

    self.healthAdd = tk.Button(self, text="+", font= 13, fg='white', bg='#000080',
                               width = 2,
                               command=lambda: self.update("addHealth"))
    self.healthSub = tk.Button(self, text=" ", font=13, fg='white', bg='red',
                               width = 2,
                               command=lambda: self.update("subHealth"))
    self.HealthTotal = tk.Label(self, text="Health: {}".format(self.health),
                                font=15, fg='#01ffff', bg='black', width=16)
    self.healthAdd.config(height = 0)
    self.HealthTotal.grid(row=1, column=0, columnspan=3)
    self.healthAdd.grid(row=1, column=10, padx=6)
    self.healthSub.grid(row=1, column=20)

def update_window(self):
    self.HealthTotal.configure(text="Health: {}".format(self.health))

顺便说一下,不包含任何内容的行和列的宽度或高度都为零。如果第1-19栏没有任何内容,那么把内容放在第10栏或第20栏是没有意义的

相关问题 更多 >