2017-11-06 2 views
-1

passenden I derzeit dieses Stück Code haben, der eine Eingabe von einem Benutzer nehmen und die eingegebene Menge an Tasten erzeugen, i dann für jede Taste wünschen, ein Feld zu haben, die gesendet werden können, zurück als Variable jedoch der folgende Code aus irgendeinem Grunde nicht den Wert des Textfeldes erhält, obwohl, wenn ich es auf die gleiche Weise versucht, mit einem es funktioniert ... Habe ich etwas verpaßt oder bin ich dies gehe über die falschen Weg? (Zufälliger Eingabewert zur Simulation der Benutzereingabe)Python Tkinter Zufallseingänge liefert statt einen

(Ich habe versucht, Python tkinter creating buttons in for loop passing command arguments, aber dies aus irgendeinem Grund beim Zurückgeben der Strings von der Eingabe, mischt sie auch z. B. gibt den Wert von Texteingabefeld 3 statt 4 )

from tkinter import * 
from random import randint 


inputValue = randint(3, 9) 


root = Tk() 


def retrieve_input2(inputed): 
    global buttons # get the dict 
    global Texts # get the dict 
    Texts.reverse() 
    print(inputed) # print what number button was pressed 
    inputed = int(inputed) - 1 
    inputvalue2 = Texts[inputed].get("1.0", "end-1c") # get the inputted value corresponding to button pressed 
    print(inputvalue2) # print the value that was entered 


buttons = [] # create empty dicts 
Texts = [] # create empty dicts 


while inputValue > 0: # for every number in inputted value 
    parse = str(inputValue) # create a string version of the input value that can be parsed to the retrieve function 

    button = Button(root, text="Lap :" + str(inputValue), command=lambda parse = parse: retrieve_input2(parse)) # create button variable 
    Texti = Text(root, height=1, width=5) # Create Text Variable 

    button.grid(row=inputValue, column=1) # put the button on the gui 
    Texti.grid(row=inputValue, column=0,) # Put the field on the gui 

    Texts.append(Texti) # append Value to dict 
    buttons.append(button) # append Value to dict 

    inputValue = int(inputValue) - 1 # take one 


root.mainloop() # Does work (required) 

Antwort

1

Zuerst Sie verwenden Listen und ihnen Wörterbücher aufrufen. Da Sie "button" und "texti" bei jedem Durchgang durch for() überlagern, haben Sie am Ende nur die letzte Schaltfläche und den letzten Text. Dieser Code speichert Taste/Textnummer und Text-Instanz in einem Wörterbuch, und übergibt die Tastennummer an die Funktion angeklickt, die dann den Inhalt aus dem Wörterbuch für den Text erhalten können, die auf diese Zahl entspricht.

from tkinter import * 
from functools import partial 
from random import randint 

inputValue = randint(3, 9) 

root = Tk() 


def retrieve_input2(button_num): 
## Texts.reverse() 
    print(button_num) # print what number button was pressed 
## inputed = int(inputed) - 1 
    inputvalue2 = texts[button_num].get("1.0", "end-1c") # get the inputted value corresponding to button pressed 
    print(inputvalue2) # print the value that was entered 


##buttons = {} # create empty dicts 
texts = {} # create empty dicts 


for ctr in range(inputValue): 
    #parse = str(inputValue) # create a string version of the input value that can be parsed to the retrieve function 

    button = Button(root, text="Lap :" + str(ctr+1), bg="lightyellow", 
        command=partial(retrieve_input2, ctr)) # ctr=Button number 
    texti = Text(root, height=1, width=5) # Create Text Variable 

    button.grid(row=ctr, column=1) # put the button on the gui 

    texti.grid(row=ctr, column=0,) # Put the field on the gui 

    texts[ctr]=texti # ctr = button num --> this Text instance 
## buttons.append(button) # append Value to dict 


root.mainloop() 
+0

Danke, Hatte ein seccond Wörterbuch zu erstellen, die fügt hinzu 'newDict [button_num = inputvalue2]', so dass anstelle des dict wenn priniting den Schlüssel zB genannt '1' dann wird der Wert:‘text1' , der Text eingegeben wird so '1' gedruckt: 'Kieron' – ItzKmaf