“Tuple”对象不可调用:模块Tkinter,对象列表框和方法curselection。语言:Python

2024-09-27 21:32:42 发布

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

你好,亲爱的程序员

我有一个“Tuple对象不可调用”错误,我需要你的帮助

File "D:\Miniconda3\envs\ml_env\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "D:\Desktop\Gestion de projet mayadigital\inter_admin.py", line 242, in valider_suppression
for i in self.employes():
TypeError: 'tuple' object is not callable

我正在创建一个链接到数据库的小软件。其中一个选项允许管理员删除一个或多个用户

为此,我在Tkinter实例中创建了一个列表框。管理员选择要删除的用户后,我想显示这些用户的列表以供确认

这就是我的问题所在:

我需要知道列表框上单击的项目是什么,因此我使用以下方法:

self.employes=self.liste_employes.curselection()

但是,由于下面的代码,当我想使用self.employes时,我得到了错误

 for i in self.employes():
        self.employes_a_supprimer.insert(i, rows[i][1]+' '+rows[i][2])
    self.employes_a_supprimer.pack()

这是我的代码摘录:


    # -*- coding: utf-8 -*-
"""
Created on Thu Jul 16 21:30:12 2020

@author: cheri
"""
from tkinter import *
import bdd_access as ba

class Interface(Frame):
    
    def __init__(self, fenetre, **kwargs):
        """Initialisation de la fenêtre"""
        Frame.__init__(self, fenetre, width=768, height=576, **kwargs)
        self.pack(fill=BOTH)
        self.menu()
        
    def supprimer(self):
        
        self.destroy_menu()
        rows=ba.liste_employes()
        
        self.tx_selection=Label(self, text="Veuillez choisir le(s) employé(s) à supprimer.")
        self.tx_selection.pack()
        self.liste_employes=Listbox(self,selectmode=BROWSE)
        for i in range (0,len(rows)):
            self.liste_employes.insert(i,rows[i][1]+' '+rows[i][2])
        self.liste_employes.pack()
        
        self.button_valider=Button(self,text="Valider",command=self.valider_suppression)
        self.button_valider.pack()

    def destroy_supprimer(self):
        self.title.destroy()
        self.tx_selection.destroy()
        self.liste_employes.destroy()
        self.button_valider.destroy()
        self.button_annuler.destroy()
        
    def valider_suppression(self):
        self.employes=self.liste_employes.curselection()
        self.destroy_supprimer()
        self.title=Label(self,text="Veuillez confirmer que vous souhaitez bien supprimer les employés suivants:")
        self.title.pack()
        
        self.employes_a_supprimer=Listbox(self, selectmode=SINGLE)
        print(self.employes)
        print(type(self.employes))
        for i in self.employes():
            self.employes_a_supprimer.insert(i, rows[i][1]+' '+rows[i][2])
        self.employes_a_supprimer.pack()
        
        self.button_confirmer=Button(self,text="Confirmer",command=self.suppression_bdd)
        self.button_confirmer.pack()
        
        self.button_retour=Button(self,text="Modifier la selection",command=retour_suppression)
        self.button_retour.pack()
        self.button_annuler=Button(self,text="Annuler l'opération",command=self.valider_supprimer_to_menu)
        self.button_annuler.pack()
    
    
    
    def menu(self):
        # Création de nos widgets        
        self.title = Label(self, text="Bienvenue sur l'interface d'administration, que souhaitez-vous faire?")
        self.title.pack()
        
        
        self.bouton_affichage_logins= Button(self,text="Affichage de tous les logins et mots de passe",command=self.affichage)
        self.bouton_affichage_logins.pack()
        
        self.bouton_ajout=Button(self,text="Ajouter un employé au système",command=self.ajout)
        self.bouton_ajout.pack()
        
        self.bouton_suppression=Button(self,text="Supprimer un employé du système",command=self.supprimer)
        self.bouton_suppression.pack()
        
        self.bouton_changer=Button(self,text="Changer un mot de passe",command=self.changer)
        self.bouton_changer.pack()
        
        self.bouton_quitter = Button(self, text="Quitter", command=self.destroy)
        self.bouton_quitter.pack()
    def destroy_menu(self):
        self.title.destroy()
        self.bouton_affichage_logins.destroy()
        self.bouton_ajout.destroy()
        self.bouton_suppression.destroy()
        self.bouton_changer.destroy()
        self.bouton_quitter.destroy()

是的,这是一个法语代码;)

Supprimer=Delete

Valider\u Suppression=确认\u Suppression

我希望我已经说得够清楚了,能被人理解

非常感谢你在我的帖子上给出的答案


Tags: textinselfbuttoncommandpackrowsdestroy
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:42

答案是我的代码中有一个错误,我看不出来,多亏了@bryan oakley的帮助

正确的代码是:

for i in self.employes: #Without parenthesis
        self.employes_a_supprimer.insert(i, rows[i][1]+' '+rows[i][2])
    self.employes_a_supprimer.pack()

问题解决了

相关问题 更多 >

    热门问题