Je crée une interface graphique à écran tactile avec des widgets à entrées multiples qui sont édités à l'aide d'un clavier. Comment puis-je savoir quel widget d'entrée l'utilisateur a sélectionné? J'ai créé un chemin détourné où chaque entrée est codée comme un bouton et quand on clique dessus, le bouton édite une variable «sélectionnée» que le clavier utilise ensuite pour savoir lequel modifier mais y a-t-il un meilleur moyen? Peut-être utiliser la mise au point? (Je les widgets bouton de travail mais je veux utiliser le widget d'entrée commenté, également un code non pertinent a été supprimé de sorte que le poste n'a pas été trop long)Comment sélectionner des widgets d'entrée spécifiques pour les appels de fonction dans tkinter à l'aide d'un écran tactile?
class MyApp(Tk):
def __init__(self,*args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side="top", fill="both", expand = True)
self.shared_data = {
'codeOne' : StringVar(),
'codeTwo' : StringVar(),
'selectedCode' : StringVar(),
}
def setCode(self, value):
#function updates selected variable
selectedVar = self.shared_data['selectedCode']
if selectedVar.get() == 'codeOne':
code = self.shared_data['codeOne']
elif selectedVar.get() == 'codeTwo':
code = self.shared_data['codeTwo']
else: #non selected
print('nothing selected')
return False
old = code.get()
if type(value) == int:
code.set(old+str(value))
else:
code.set(old[0:len(old)-1])
return True
def setVariable(self, variable, value):
variable.set(value)
return True
class MenuPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
Label(self, text="Code 1:", font='Helvetica 15').grid(row=2, column=0, columnspan=3, sticky=E, pady=10)
Button(self, textvariable=controller.shared_data['codeOne'], font=MENU_ENTRIES, width=7, bg='grey99', command=lambda:controller.setVariable(controller.shared_data['selectedCode'],'codeOne')).grid(row=2, column=1, pady=10)
#Entry(self, textvariable=controller.shared_data['codeOne'], font='Helvetica 15').grid(row=2, column=3, columnspan=1, pady=10, sticky=W)
Label(self, text="Code 2:", font='Helvetica 15').grid(row=3, column=0, columnspan=3, sticky=E, pady=10)
Button(self, textvariable=controller.shared_data['codeTwo'], font=MENU_ENTRIES, width=7, bg='grey99', command=lambda:controller.setVariable(controller.shared_data['selectedCode'],'codeTwo')).grid(row=2, column=1, pady=10)
#Entry(self, textvariable=controller.shared_data['codeTwo'], font='Helvetica 15').grid(row=3, column=3, columnspan=3, pady=10, sticky=W)
Button(self, text="1", width=3, command=lambda:controller.setCode(1)).grid(row=1, column=3, rowspan=2, padx=(20,5), pady=10)
Button(self, text="2", width=3, command=lambda:controller.setCode(2)).grid(row=1, column=4, rowspan=2, padx=5, pady=10)
Button(self, text="3", width=3, command=lambda:controller.setCode(3)).grid(row=1, column=5, rowspan=2, padx=5, pady=10)
Button(self, text="4", width=3, command=lambda:controller.setCode(4)).grid(row=3, column=3, rowspan=2, padx=(20,5), pady=10)
Button(self, text="5", width=3, command=lambda:controller.setCode(5)).grid(row=3, column=4, rowspan=2, padx=5, pady=10)
Button(self, text="6", width=3, command=lambda:controller.setCode(6)).grid(row=3, column=5, rowspan=2, padx=5, pady=10)
Button(self, text="7", width=3, command=lambda:controller.setCode(7)).grid(row=5, column=3, rowspan=2, padx=(20,5), pady=10)
Button(self, text="8", width=3, command=lambda:controller.setCode(8)).grid(row=5, column=4, rowspan=2, padx=5, pady=10)
Button(self, text="9", width=3, command=lambda:controller.setCode(9)).grid(row=5, column=5, rowspan=2, padx=5, pady=10)
Button(self, text="DELETE", width=7, command=lambda:controller.setCode('delete')).grid(row=7, column=3, rowspan=2, columnspan=2, padx=(20,5), pady=10)
Button(self, text="0", width=3, command=lambda:controller.setCode(0)).grid(row=7, column=5, rowspan=2, padx=5, pady=10)
app = MyApp()
app.mainloop()
Merci! Je vais devoir modifier la fonction d'insertion pour quand la touche d'effacement est pressée mais à part cela, cela fonctionne! –