2 votes

Pourquoi deux champs d'entrée ayant les mêmes valeurs "text =" sont-ils traités comme le même champ d'entrée ?

J'ai posé une question concernant l'insertion d'un texte dans deux champs de saisie alors qu'il ne devrait être inséré que dans un seul. Les lignes de code qui posent problème sont les suivantes :

MoneyAvailableTextBox = Entry(temp, font=('arial', 14, 'bold'), bg='White', fg = 'Black', bd = 5, width = 10, borderwidth = 4,  justify = CENTER, text = '£')
MoneyAvailableTextBox.grid(row = 1, column = 0, pady = 10)

HeistAwardTextBox = Entry(temp, font=('arial', 14, 'bold'), bg='White', fg = 'Black', bd = 5, width = 10, borderwidth = 4,  justify = CENTER, text = '£')
HeistAwardTextBox.grid(row = 3, column = 0, pady = 10)

Un de mes amis a fini par comprendre le problème et j'ai répondu à ma propre question au cas où quelqu'un d'autre serait confronté à ce problème. Le problème était que les deux boîtes de saisie avaient text = '£' . Mon ami a simplement modifié l'un d'entre eux pour qu'il ait la valeur $ et le problème a été résolu. Les supprimer permet également de résoudre le problème. Ni lui ni moi ne savons pourquoi le fait d'avoir à saisir des boîtes avec le même text = '£' fait en sorte qu'ils soient traités comme la même boîte de saisie.

J'ai reproduit le problème ci-dessous. J'ai simplifié le code.

import tkinter as tk
from tkinter import*

trialGUI = Tk()
trialGUI.title('Text Boxes')

#This is the text which will be inserted
value1 = 'Hello'
value2 = 'Bye'

#This inserts the text into the entry boxes
def updateStats():
    entryBox1.delete('0', END)
    #This should insert Hello in the first box
    entryBox1.insert(tk.INSERT, value1)
    entryBox2.delete('0', END)
    #This should insert Bye in the second box
    entryBox2.insert(tk.INSERT, value2)

# These are the text boxes
entryBox1 = Entry(trialGUI, text = '£')
entryBox1.grid(row = 0)
entryBox2 = Entry(trialGUI, text = '£')
entryBox2.grid(row = 1)

#Button which when pressed inserts texting into the entry boxes
Button1 = Button(trialGUI, command = updateStats, text = 'Insert Text')
Button1.grid(row = 2)

trialGUI.mainloop()

Comme je l'ai dit, ce problème a été résolu. Je cherche simplement à savoir pourquoi le problème se pose en premier lieu.

2voto

acw1668 Points 1887

text est identique à l'option textvariable option pour les Entry widget. Puisque vous avez passé une chaîne de caractères "£" mais pas une instance de StringVar , une instance de StringVar sera créée implicitement avec la chaîne de caractères comme nom. Ainsi, les deux Entry Les widgets utilisent les mêmes StringVar . Par conséquent, si l'on modifie l'un d'entre eux, l'autre sera également modifié puisqu'ils partagent les mêmes caractéristiques. StringVar .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X