Guten Abend,
ich habe mich schon länger nicht mit Python beschäftigt und stehe etwas auf dem Schlauch momentan.
Ich habe eine Hauptprogramm und eine Python File in dem Arrays sind.
Funktion: Im Entry Feld eine Nummer eingeben und in dem man auf 'next' drückt soll das Array (temp_ + die eingegeben Zahl aufgerufen werden)
Problem: Ich bekomme es nicht hin das genau das Array geladen wird mit der eingegebenen Zahl
Beispiel: Ich gebe im Entry Feld eine 2 ein dann soll wenn ich auf Next drücke das zweite Array geladen werden
PS: Ich weiß Sternchen Importe macht man nicht, hoffe ihr habt mein Problem verstanden und könnt mir ein Tipp geben.
Hauptprogramm: (main.py):
from tkinter import *
import external
def main():
root = Tk()
root.title('main')
root.geometry('500x500')
def num(self):
if E.get() == '':
x.set('Please enter a number')
else:
x.set(E.get())
def nex():
if E.get() == '' or int(E.get ()) > 1200:
y.set('No Song find in the Cache')
else:
a = z.get() + 1
z.set(a)
try:
y.set(external.temp_1[a]) #temp_1 es soll immer das Array aufgerufen werden welche Nummer eingegeben wurde
except IndexError:
y.set('***END***')
z.set(0)
#Variablen
x= StringVar()
x.set('')
y= StringVar()
y.set('')
z = IntVar()
z.set(0)
E = Entry (root)
E.pack()
E.bind("<Return>", num)
# Button next Value from array
B = Button (root, text ='Next',command=nex)
B.pack()
#Label for Number
L = Label(root,textvariable=x ,fg='blue')
L.config(font=('Arial'))
L.pack()
#Label for array
L1 = Label(root,textvariable=y,fg='red')
L1.config(font=('Arial'))
L1.pack()
root.mainloop()
if __name__ == '__main__':
main()
Externe Datei: (external.py)
temp_1 = [1,'Test-1','Test-2','Test-3','Test-4','Test-5','Test-6','Test-7']
temp_2 = [2,'2_Test-1','2_Test-2','2_Test-3','2_Test-4','2_Test-5','2_Test-6']
Daten aktualisieren
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Andi187: Das sind keine Arrays das sind Listen. Es gibt auch Arrays in Python, damit ist das verwirrend Listen als Arrays zu bezeichnen.
Man nummeriert keine Namen durch. Wenn man das macht, will man sich entweder bessere, passendere Namen ausdenken, oder gar keine einzelnen Namen und Werte sondern eine Datenstruktur. Oft eine Liste. So auch hier. Statt die (komischen) Temperaturen an zwei Namen zu binden, einen Namen mit einer Liste mit den beiden Werten.
Die Temperaturlisten sehen komisch aus weil Listen für gleichartige Werte gedacht sind. Wenn das erste Element immer eine Zahl und der Rest Zeichenketten sind, dann riecht das komisch. Wahrscheinlich sollte so eine Liste eher ein Tupel aus dem ersten Wert und einer Liste mit den Zeichenketten sein.
Die ganzen anderen Namen sind auch *sehr* schlecht. Einbuchstabige Namen sagen sehr selten aus wofür der Wert dahinter steht, aber genau das sollten Namen tun. Und auch `nex()` und `num()` verwirren mehr als das sie dem Leser helfen das Programm zu verstehen.
Sternchen-Importe sind Böse™. Da holt man sich gerade bei `tkinter` fast 200 Namen ins Modul von denen nur ein kleiner Bruchteil verwendet wird. Auch Namen die gar nicht in `tkinter` definiert werden, sondern ihrerseits von woanders importiert werden. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen.
Das die beiden Funktionen `nex()` und `num()` innerhalb der `main()`-Funktion definiert werden ist auch unübersichtlich und schwer zu testen. Funktionen und Methoden sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen.
Man nummeriert keine Namen durch. Wenn man das macht, will man sich entweder bessere, passendere Namen ausdenken, oder gar keine einzelnen Namen und Werte sondern eine Datenstruktur. Oft eine Liste. So auch hier. Statt die (komischen) Temperaturen an zwei Namen zu binden, einen Namen mit einer Liste mit den beiden Werten.
Die Temperaturlisten sehen komisch aus weil Listen für gleichartige Werte gedacht sind. Wenn das erste Element immer eine Zahl und der Rest Zeichenketten sind, dann riecht das komisch. Wahrscheinlich sollte so eine Liste eher ein Tupel aus dem ersten Wert und einer Liste mit den Zeichenketten sein.
Die ganzen anderen Namen sind auch *sehr* schlecht. Einbuchstabige Namen sagen sehr selten aus wofür der Wert dahinter steht, aber genau das sollten Namen tun. Und auch `nex()` und `num()` verwirren mehr als das sie dem Leser helfen das Programm zu verstehen.
Sternchen-Importe sind Böse™. Da holt man sich gerade bei `tkinter` fast 200 Namen ins Modul von denen nur ein kleiner Bruchteil verwendet wird. Auch Namen die gar nicht in `tkinter` definiert werden, sondern ihrerseits von woanders importiert werden. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen.
Das die beiden Funktionen `nex()` und `num()` innerhalb der `main()`-Funktion definiert werden ist auch unübersichtlich und schwer zu testen. Funktionen und Methoden sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Die Namen sind allesamt schlecht. Funktionen dürfen mehr als drei Buchstaben haben und Variablen mehr als einen. So ist es völlig unverständlich und man muss den Code von oben bis unten dreimal lesen, um was zu verstehen. Statt Variablen durchzunummerieren benutzt man Listen.