如何从另一个类中的实例化列表框中删除或插入项?

2024-05-06 10:32:44 发布

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

下午好在这个脚本中,我正在尝试执行以下任务,但它们抛出了一个错误:

1-从实例化器类访问listbox的值

2-从Spinbox类对父类的调用中删除Listbox的整个列表:Frame_uuClass

我不知道我想要的是脚本中的良好结构还是我的逻辑不正确。请给我一个建议。谢谢你

from tkinter import *

class Frame_class(Frame):
    def __init__(self, parents, *args, **kwargs):
        Frame.__init__(self, parents, *args, kwargs)
        self.listbox = Listbox_class (self, width=11, height=1)
        self.listbox .pack() 

        self.spinbox = Spinbox_class (self, width=11)
        self.spinbox .pack()
        
        # from here I want to get the value of 
        # the first item of listbox or delete it     

    def delete(self, number):
        if number == 1:
            self.listbox.delete(0, END)
        if number == 2:
            self.listbox.delete(0, 1)


class Listbox_class(Listbox, Frame_class):

    def __init__(self, master, **kwargs):
        Listbox.__init__(self, master, **kwargs)       
        self.config (font=('Calibri',9,'bold'))
        self.insert(0, 'banana1')
        self.insert(0, 'orange1')



class Spinbox_class(Spinbox, Frame_class):

    def __init__(self, master, **kwargs):
        Spinbox.__init__(self, master, **kwargs)
        self.var = StringVar() 
        self.val = [1,2,3,4,5,6,7,8,9]      
        self.config (font=('Calibri',9,'bold'), textvariable= self.var, values= self.val)
        self.var.trace_add ('write', self.change)
        
      
    def change(self, *args):
        spinbox = self.get()

        if spinbox == '':                                                          
            Frame_class .delete(1)  
        else:  
            pass

root = Tk()
root.geometry('250x130+100+100')   
app =  Frame_class (root)
app . pack()
root.mainloop()

尝试删除spinbox的内容时,此代码引发以下错误: TypeError:delete()缺少1个必需的位置参数:“number”


Tags: selfmasternumberinitdefargsrootdelete
1条回答
网友
1楼 · 发布于 2024-05-06 10:32:44

您需要在这里实例化一个类实例。 这样做:

frame = Frame_class(root)
frame.delete(1)  

完整代码:

from tkinter import *

class Frame_class(Frame):
    def __init__(self, parents, *args, **kwargs):
        Frame.__init__(self, parents, *args, kwargs)
        self.listbox = Listbox_class(self, width=11, height=1)
        self.listbox.pack() 

        self.spinbox = Spinbox_class(self, width=11)
        self.spinbox.pack()
        
        # from here I want to get the value of 
        # the first item of listbox or delete it     

    def delete(self, number):
        if number == 1:
            self.listbox.delete(0, END)
        if number == 2:
            self.listbox.delete(0, 1)


class Listbox_class(Listbox, Frame_class):

    def __init__(self, master, **kwargs):
        Listbox.__init__(self, master, **kwargs)       
        self.config(font=('Calibri',9,'bold'))
        self.insert(0, 'banana1')
        self.insert(0, 'orange1')



class Spinbox_class(Spinbox, Frame_class):

    def __init__(self, master, **kwargs):
        Spinbox.__init__(self, master, **kwargs)
        self.var = StringVar() 
        self.val = [1,2,3,4,5,6,7,8,9]      
        self.config (font=('Calibri',9,'bold'), textvariable= self.var, values= self.val)
        self.var.trace_add ('write', self.change)
        
      
    def change(self, *args):
        spinbox = self.get()

        if spinbox == '':   
            frame = Frame_class(root)
            frame.delete(1)  
        else:  
            pass

root = Tk()
root.geometry('250x130+100+100')   
app =  Frame_class(root)
app.pack()
root.mainloop()

相关问题 更多 >