gpt4 book ai didi

python - 为 tkinter 小部件创建一个类来调用默认属性

转载 作者:行者123 更新时间:2023-12-01 08:12:33 24 4
gpt4 key购买 nike

我正在尝试使用 Python3 中的 tkinter 创建一个 GUI,它将有几个按钮,我不想每次都为所有按钮键入相同的属性,如下所示:

tkinter.Button(topFrame, font=("Ariel", 16), width=10, height=10,
fg="#ffffff", bg="#000000", text="Cake")

例如,每个按钮上的fgbg颜色和大小都相同。每个按钮上唯一改变的是文本以及屏幕上放置它们的位置。

我对编程和 Python 很陌生,当我想创建一个新按钮时,我尝试重用代码。我认为我缺少对类(class)的一些理解,而当我阅读它时我没有得到这些理解。

我想为每个按钮和不同的框架传递不同的文本,以便将其放置在 GUI 上的不同位置,并使其他所有内容都相同。

到目前为止我的代码:

import tkinter
import tkinter.messagebox

window = tkinter.Tk()

#create default values for buttons
#frame and buttonText are the values passed to the class when making a new
#button
class myButtons:
def buttonLayout(self, frame, buttonText):
self.newButton=tkinter.Button(frame, font=("Ariel", 16),
width=10, height=10, fg=#ffffff,
bg=#000000, text=buttonText)

topFrame = tkinter.Frame(window)
topFrame.pack()

#create new button here and place in the frame called topFrame with the text
#"Cake" on it
buttonCake = myButtons.buttonLayout(topFrame, "Cake")
#position the new button in a certain cell using grid in topFrame
buttonCake.grid(row=1, column=0)

window.mainloop()

当我尝试运行它时出现的错误是:

TypeError: buttonLayout() missing 1 required positional argument: 'buttonText'

我很困惑,因为我传入了“Cake”,但错误表明它丢失了。

感谢您指出init,我不知道如何使用init来解决我的问题,但这以及这里给出的答案很有帮助。谢谢。

最佳答案

由于 self 参数,您会收到错误。还有一个问题是您的代码未创建 MyButtons 类的实例。

以下示例继承自 Button 并自定义 __init__ 以设置一些默认值。

import tkinter
import tkinter.messagebox

window = tkinter.Tk()

#create default values for buttons
#frame and buttonText are the values passed to the class when making a new button

class MyButton(tkinter.Button):
def __init__(self, *args, **kwargs):
if not kwargs:
kwargs = dict()
kwargs['font'] = ("Arial", 16)
kwargs['width'] = 10,
kwargs['height'] = 10,
kwargs['fg'] = '#ffffff',
kwargs['bg'] = '#000000',
super().__init__(*args, **kwargs)

topFrame = tkinter.Frame(window)
topFrame.pack()

#create new button here and place in the frame called topFrame with the text "Cake" on it
buttonCake = MyButton(topFrame, text="Cake")
#position the new button in a certain cell using grid in topFrame
buttonCake.grid(row=1, column=0)

window.mainloop()

这会强制将默认值放入按钮中。仅当您不在调用中传递它们时,您才可以添加 if 语句来定义它们,方法如下:

if not 'width' in kwargs:
kwargs['width'] = 10

关于python - 为 tkinter 小部件创建一个类来调用默认属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55151133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com