接收错误:\ u tkinter.TclError:无效的命令名“!frame3.!treeview”

2024-10-01 04:48:19 发布

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

我正在为一家当地企业编写一个简单的程序,该程序将允许其用户轻松跟踪他们的工作服务通知单。在某一点上,我让程序运行时没有错误。然而,由于我对编程非常陌生,并且输入了很多杂乱的代码,我回去后决定清理一些代码,并添加更好的功能。在这样做的过程中,我导致了一个错误的发生,而我似乎无法修复它

我已经尝试了多种方法来解决这个问题,但我所能确定的是,如果我删除一小段代码,它基本上会正常运行

以下是两个定义:

def gui_elements_remove(self, elements):
     for element in elements:
        element.destroy()

def Load(self):

    self.gui_elements_remove(self.gui_elements) 
    
    var = self.FirstTree.focus()
    treevar = self.FirstTree.item(var)
    JobDF = pd.DataFrame(treevar, index = [0])
    self.JobID = JobDF.iloc[0]['values']

    cursor1 = self.cursor.execute("SELECT * from 'Service Tickets' WHERE JobID = ?", (self.JobID))
    SP = cursor1.fetchall()
    df = pd.DataFrame(SP, columns = [
                                    'ServiceTicketsID',
                                    'JobID',
                                    'Ticket Number',
                                    'Reason for Visit',
                                    'Warranty/VPO',
                                    'Date Ticket Received',
                                    'Date of Service',
                                    'Service Person'
                                    ])
 


    columns =   [
                'ServiceTicketsID',
                'Ticket Number',
                'Reason for Visit',
                'Warranty/VPO',
                'Date Ticket Received',
                'Date of Service',
                'Service Person'
                ]


    LoadFrame = Frame(self.root)
    LoadFrame.pack(fill = BOTH, expand = True, padx = 50)
    scroll = Scrollbar(LoadFrame, orient = VERTICAL)
    SecondTree = ttk.Treeview(LoadFrame, yscrollcommand = scroll.set, columns = columns)
    SecondTree['show'] = 'headings'
    SecondTree.heading('#1', text = 'ServiceTicketsID')
    SecondTree.heading('#2', text = 'Ticket Number')
    SecondTree.heading('#3', text = 'Reason for Visit')
    SecondTree.heading('#4', text = 'Warranty/VPO')
    SecondTree.heading('#5', text = 'Date Ticket Received')
    SecondTree.heading('#6', text = 'Date of Service')
    SecondTree.heading('#7', text = 'Service Person')
    SecondTree.column('#1', width = 0, stretch = NO)
    SecondTree.column('#2', width = 75, stretch = YES, anchor = "n")
    SecondTree.column('#3', width = 75, stretch = YES, anchor = "n")
    SecondTree.column('#4', width = 75, stretch = YES, anchor = "n")
    SecondTree.column('#5', width = 100, stretch = YES, anchor = "n")
    SecondTree.column('#6', width = 100, stretch = YES, anchor = "n")  
    SecondTree.column('#7', stretch = YES, anchor = "n")   
    scroll.config(command = SecondTree.yview)
    scroll.pack(side = RIGHT, fill = Y)
    SecondTree.pack(fill = BOTH, expand = TRUE)
    Maintree = df   [[
                    'ServiceTicketsID',
                    'Ticket Number',
                    'Reason for Visit',
                    'Warranty/VPO',
                    'Date Ticket Received',
                    'Date of Service',
                    'Service Person'
                    ]]
    Maintree_rows = Maintree.to_numpy().tolist()
    for row in Maintree_rows:
        SecondTree.insert("", 0, values = row)

    for col in columns:
        SecondTree.heading(col, text=col, command=lambda _col=col: \
                    self.Treeview_sort_column(SecondTree, _col, False))

    b1 = Button(LoadFrame, text = "Add")
    b2 = Button(LoadFrame, text = "Update")
    b3 = Button(LoadFrame, text = "Cancel")
    b1.configure(command = lambda: self.Load_Add())
    b2.configure(command = lambda: self.Load_Update())
    #b3.configure(command = lambda: self.Cancel_Button(LoadFile, self.MainWindow, self.root))
    b1.pack(side = LEFT, padx = 5, pady = 50)
    b2.pack(side = LEFT, padx = 5, pady = 50)
    b3.pack(side = LEFT, padx = 5, pady = 50)

有更多的代码,但我提供的应该足够了,希望如此。调用第一个方法以从正在运行的前一个方法中清除帧。其余的应该是从上一个树视图中获取用户的选择。然而,在运行这段代码时,我得到了一个错误

_tkinter.TclError: invalid command name ".!frame3.!treeview"

如果我注释掉这段代码:

        var = self.FirstTree.focus()
    treevar = self.FirstTree.item(var)
    JobDF = pd.DataFrame(treevar, index = [0])
    self.JobID = JobDF.iloc[0]['values']

    cursor1 = self.cursor.execute("SELECT * from 'Service Tickets' WHERE JobID = ?", (self.JobID))
    SP = cursor1.fetchall()
    df = pd.DataFrame(SP, columns = [
                                    'ServiceTicketsID',
                                    'JobID',
                                    'Ticket Number',
                                    'Reason for Visit',
                                    'Warranty/VPO',
                                    'Date Ticket Received',
                                    'Date of Service',
                                    'Service Person'
                                    ])
 

除了与之相关的其余代码外,该程序运行正常。框架被清除,新的TreeView以及它的标题被引入

正如我所说,我对编程是全新的,因此我对使用StackOverflow是全新的。话虽如此,如果我没有提供足够的信息、发布错误等,我深表歉意。对于您可能在代码lol中发现的任何疏忽,我也提前表示歉意

我感谢所有的意见


Tags: columns代码textselffordateservicecolumn
1条回答
网友
1楼 · 发布于 2024-10-01 04:48:19
JobDF = pd.DataFrame(treevar, index = [0])

cursor1 = self.cursor.execute("SELECT * from 'Service Tickets' WHERE JobID = ?", (self.JobID))

他们是罪魁祸首

应该是的

JobDF = pd.DataFrame(treevar) #removed the index argument

cursor1 = self.cursor.execute("SELECT * from 'Service Tickets' WHERE JobID = ?", (self.JobID,))  #added a comma (self.JobID,))

相关问题 更多 >