Tkinter:我如何适当地设定的参数的扩展的按钮上课吗?

0

的问题

我尝试创造一个客户关系管理程序使用 tkinter蟒蛇 ,并希望有个按钮所生成的基础上表中的数据库。

这个想法是,有一个按钮,对于每一个表中的数据库,以便表可以观察和编辑,如果需要的。

我想要的每一个按钮看起来是一样的,点击时,产生一个列表中的条目进的主要框架的我的程序。 要做到这一点,我想要扩大按钮()类,这样我可以保持某些特性并行,同时也定义 display_items 功能:

class TabButton(Button):

    def __init__(self, *args, **kwargs):
        super().__init__(Button)
        self['bg'] = '#a1a1a1'
        self['font'] = ('Agency', 24)

    def display_items(self, tab):
        pass
        #mycursor.execute('SELECT * FROM (%s)', tab)

这最后一行(以上)是什么选择的数据正确的表在我的数据库-我说出来的话我想出其他的类。 我知道什么是*args及**kwargs做,但我不确定什么目的,他们必须在这 __init__ 功能(我不是很熟悉课程和复制这类从另一个堆栈溢出员额)。

产生的按钮,我引用一个 dict 实例,并分配给每个关键要一个按钮:

tabs = {
    'Table1': '',
    'Table2': '',
    'Table3': '',
}

for tab in tabs:
    row = 0
    tabs[tab] = TabButton(side_frame, command=lambda: TabButton.display_items(tab))
    tabs[tab].grid(row=row, column=0)
    row += 1

问题是,当我运行的程序,我得到这个错误:

AttributeError: type object 'Button' has no attribute 'tk'

任何和所有的指导,欢迎!

如果你注意到任何其他的差错在我的代码,可以请你指出他们? 我非常新编程,它将拯救我做另一个职位上堆溢出。 :p

谢谢, J

crm inheritance parameters python
2021-11-23 20:08:50
1

最好的答案

0

超级 返回临时的目的,类和让你访问其内容。 超本身,接受任何论点. 还看到 prupose自 在这一 背景下.

自我代表的实例的类

通常,第一个参数的一个方法是所谓的自我。 这是什么 超过一个《公约》:该名自我绝对没有特殊 意义蟒蛇。 然而,请注意,不按照《公约》 你的代码可以小可读到的其他蟒蛇的程序员

另一个问题是使用 lambda. 你的论点 tab 将被复盖(如果它不是储存)通过每次迭代的循环。 另一个问题,你可能没意图使用这类方法而不是你想要calles由的实例,因此我添加的论点自我为你的方法和改变你的lambda使用的实例。

import tkinter as tk
tabs = {'Table1': '', 
        'Table2': '',
        'Table3': '',
        }

root=tk.Tk()

class TabButton(tk.Button):
    def __init__(self,master, *args, **kwargs):
        #self is a reference to the instance of that object
        super().__init__(master)#super dosent need a reference
        self['bg'] = kwargs.get('bg','#a1a1a1')
        self['font'] = kwargs.get('font',('Agency', 24))
    def display_items(self,item):
        print(f'{item} to show')
for tab in tabs:
    b = TabButton(root) #returns a reference to that object
    b.configure(command=lambda btn=b, argument=tab:btn.display_items(argument))
    b.pack()

root.mainloop()
2021-11-24 09:11:31

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................