Tkinter ListBox output

Fragen zu Tkinter.
Antworten
evev
User
Beiträge: 27
Registriert: Dienstag 4. April 2017, 12:50

Montag 12. Februar 2018, 15:31

Hi Community,
ich bräuchte mal wieder eure Hilfe.

Ich möchte gerne aus einer Listbox den Inhalt zusammen mit zwei Entry-Inhalten ausprinten. Nur leider funktioniert das nicht.
Habe schon alles mögliche durchsucht und nichts gefunden was mir hilft. (google, youtube, stockoverflow use...)
Vielleicht weiß einer von euch Rat. Unabhängig davon das es wahrscheinlich nicht optimal ausgearbeitet wurde.

Ich setzt euch einfach den ganze Code rein, da ich leider keine andere Möglichkeit sehe.
def get_input sollte eigentlich den usertext3 verarbeiten können, sodass ich ihn innerhalb von def get_start mit ausprinten kann.

Output sollte sein ... Symbol/von/bis... (Symbol fehlt mir)

Danke schon einmal im vorraus.

Code: Alles auswählen

from tkinter import*
import tkinter

#---------------Fenster

window = Tk()
window.geometry("400x400")


def get_input():

    lab.after(200, get_input)
    sel = ListBox.curselection()

    for i in sel:
        lab.config(text=List[i])
        usertext3 = List[i]

        

def get_start():
    test =  usertext1.get(), " bis ", usertext2.get()   # hier müsste noch der output 
                                                        # von usertext3 hin
                                                        
    print(test)


#----------------Rahmenfenster

rahmen1 = Frame(master =window)
rahmen1.pack(side='top', padx=5, pady=5)
rahmen2 = Frame(master=rahmen1)
rahmen2.pack(side='top', padx='5', pady='5')
rahmen3 = Frame(window)
rahmen3.pack(side='top', padx='5', pady='5')
rahmen5 = Frame(window)
rahmen5.pack()
rahmen4 = Frame(rahmen3 )
rahmen4.pack(side='top', padx='5', pady='5')


#----------------Überschrift------------------

label1 = Label(master=rahmen2, text="Symbol")
label1.pack(side='top', padx='5', pady='5')


#----------Liste--------------------------------------------------------------

List = ['Dax','Dow','EUR/USD', 'a', 'b','c','d','e','f','g','h','i','j','k','l','m','n','o','d','e','f','g','h','i','c','d','e','f','g','h','i','j','k','l','m']

ListBox =Listbox(rahmen2)
ListBox.config(  width = 50)
for i in List:
    ListBox.insert(tkinter.END, str(i))
ListBox.pack(padx = 40, side = 'right', anchor = E)

#-------von------------------------------------------------------------------


LabelBsp = Label(master = rahmen4, text = '\nEingabeform: Monat/Tag/Jahr\n')
LabelBsp.pack(anchor = W ,padx = 80)
LabelEnd = Label(master = rahmen4, text = 'von: ')
LabelEnd.pack(side='left')
usertext1 = StringVar()
Entry1= Entry(rahmen4,textvariable = usertext1)
Entry1.pack(side = 'left',padx = 20)


#-----bis-----------------------------------------------------------------------

LabelStart = Label(master=rahmen4, text = 'bis: ')
LabelStart.pack(side = 'left')
usertext2 = StringVar()
Entry2= Entry(rahmen4,textvariable = usertext2)
Entry2.pack(side = 'left',padx = 20)





#+++++++++++++++GetData---------------------------------------------------

Button1 = Button(text='GetData' , command = get_start)
Button1.config( height = 2, width = 50 )
Button1.pack()

#----------Statusbar

statusbar = Label(text=" ###########",anchor =W)
statusbar.pack(side='bottom', anchor = W, fill = X)



lab = Label(rahmen5,bg='red')
lab.pack()



get_input()


window.mainloop()
evev
User
Beiträge: 27
Registriert: Dienstag 4. April 2017, 12:50

Montag 12. Februar 2018, 16:36

Ok hat sich erledigt!

Code: Alles auswählen

def get_start():


    sel = ListBox.curselection()
    for i in sel:
        label3.config(text=List[i])
        usertext3 = List[i]

    test = usertext3,  usertext1.get(), " bis ", usertext2.get()   # hier müsste noch der output
                                                        # von usertext3 hin
    print(test)
Def get_input wurde gelöscht und def get_start abgeändert.
evev
User
Beiträge: 27
Registriert: Dienstag 4. April 2017, 12:50

Dienstag 13. Februar 2018, 17:00

HiHi
ich habe doch noch ein Problem mit Tkinter.
und zwar möchte ich gerne die geschriebene Anwendung in einem neuen Skript öffnen, was soweit auch klappt.
Nur habe ich dann keinen Zugriff auf die einzelnen generierten Inputs.
usertext1_out
usertext2_out
usertext3_out
usertext4_out
usertext5_out
usertext6_out

Diese möchte ich gerne in die neue py Datei übergeben. Beim Ausführen gibts dann diese Fehlermeldung:

Traceback (most recent call last):
File "F:\Python_Projekt\Übung\Plus\test.py", line 4, in <module>
tk = own.get_start()
File "F:\Python_Projekt\Übung\Plus\plus_window_pack2.py", line 31, in get_start
sel = ListBox1.curselection()
File "C:\Users\nox\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 2782, in curselection
return self._getints(self.tk.call(self._w, 'curselection')) or ()
_tkinter.TclError: invalid command name ".!frame.!frame.!listbox"

Code: Alles auswählen

from tkinter import*
import tkinter as tk

window = Tk()
window.geometry('400x450')
window.title('GetData')
window.minsize(290, 200)
window.wm_iconbitmap('F:\Python_Projekt\Übung\Plus\candle4.ico')






#--------------------Function-------------------------




'''def get_input():

    label5.after(200, get_input)
    sel = ListBox1.curselection()
    for i in sel:
        label5.config(text=List[i])
        usertext5 = List[i]'''


def get_start():

    sel = ListBox1.curselection()
    sel2 = ListBox2.curselection()
    for i in sel2:
        usertext6 = List2[i]
    for i in sel:
        usertext5 = List[i]

    usertext1_out = usertext1.get()
    usertext2_out = usertext2.get()
    usertext3_out = usertext3.get()
    usertext4_out = usertext4.get()
    usertext5_out = usertext5
    usertext6_out = usertext6

    print('Datum von:',usertext1_out,' bis: ', usertext2_out)
    print('Uhrzeit von:',usertext3_out,' bis: ' ,usertext4_out)
    print('Zeiteinheit: ', usertext6)
    print('Symbol: ', usertext5,'\n')
    return usertext1_out, usertext2_out, usertext3_out, usertext4_out


#--------------------------------------------------------------------------Frames
#-----------------------erstes Fenster------------------------
#überall dort wo window steht ist das übergeordnete Element das ganze Rahmenfenster
#somit springt man immer in eine neue Zeile

rahmen1 = Frame(master = window) #, bg='black'
rahmen1.pack(side='top', padx=5, pady=5)
rahmen2 = Frame(master = rahmen1)  #, bg= 'yellow'
rahmen2.pack(side='left', padx=5, pady=5)
rahmen3 = Frame(rahmen1)  #, bg = 'green'
rahmen3.pack(side='left', padx=5, pady=5)
rahmen4 = Frame(rahmen3)#  , bg = 'lightgreen'
rahmen4.pack(side='left', padx=5, pady=5)

#----------------------zeweites Fenster------------------------

rahmen5 = Frame(window)  #, bg = 'red'
rahmen5.pack(side='top', padx=5, pady=5)

rahmen6 = Frame(rahmen5)  #,bg = 'magenta'
rahmen6.pack(side='left', padx=5, pady=5)
rahmen7 = Frame(rahmen6)#  ,bg = 'goldenrod'
rahmen7.pack(side='bottom', padx=0, pady=5)

rahmen8 = Frame(window) # ,bg = 'coral'
rahmen8.pack(side='top', padx=0, pady=5)
rahmen9 = Frame(rahmen8)  #,bg = 'deep pink'
rahmen9.pack(side='left', padx=0, pady=5)

rahmen10 = Frame(rahmen9)  # ,bg = 'coral'
rahmen10.pack(side='top', padx=0, pady=5)

#------------------------------------------------------------------------------Widgets
#------------------------ListBox1-----------------------------


List = ['Dax','Dow','EUR/USD', 'Gold', 'Silber','EUR/JPY','USD/JPY','usw....(ab hier Lückenfüller)','f','g','h','i','j','k','l','m','n','o','d','e','f','g','h','i','c','d','e','f','g','h','i','j','k','l','m']

scrollbar1 = Scrollbar(rahmen2) # ,bg='green'
scrollbar1.pack(padx = 1,side = 'right',fill=Y)

ListBox1 = Listbox(rahmen2,exportselection = False)
ListBox1.config( yscrollcommand = scrollbar1.set, width = 40)
scrollbar1.config( command = ListBox1.yview) # ,bg='blue'
for i in List:
    ListBox1.insert(tk.END, str(i))
ListBox1.pack(padx = 1,)

#------------------------ListBox2-------------------------------

List2 = ['m1','m5','m15','m30','1h','5h','1d','5d','m5','m15','m30','1h','5h','1d','5d']

scrollbar2 = Scrollbar(rahmen4) # ,bg='green'
scrollbar2.pack(padx = 3,side = 'right',fill=Y)

ListBox2 = Listbox(rahmen4,exportselection = False)
ListBox2.config( yscrollcommand = scrollbar2.set, width = 5, height = 5)
scrollbar2.config( command = ListBox2.yview) # , bg='blue'
for i in List2:
    ListBox2.insert(tk.END, str(i))
ListBox2.pack(pady = 5)

#------------------------Label+Entry----------------------------



Label0 = Label(rahmen6,text='Zeile 1 von-bis:   Jahr/Monat/Tag \n Zeile 2 von-bis:   Uhrzeit\n', font = 'Calibri 10 bold ')
Label0.pack(side = 'top')

Label1 = Label(rahmen6,text='von:')
Label1.pack(side = 'left')
usertext1 = StringVar()
Entry1 = Entry(rahmen6, textvariable = usertext1)
Entry1.insert(0, "1")
Entry1.pack(side = 'left')

Label2 = Label(rahmen6,text=' bis : ')
Label2.pack(side = 'left')
usertext2 = StringVar()
Entry2 = Entry(rahmen6,textvariable = usertext2)
Entry2.insert(0, "2")
Entry2.pack(side = 'left')

Label3 = Label(rahmen7,text='von:')
Label3.pack(side = 'left')
usertext3 = StringVar()
Entry3 = Entry(rahmen7,textvariable = usertext3)
Entry3.insert(0, "3")
Entry3.pack(side = 'left')

Label4 = Label(rahmen7,text=' bis : ')
Label4.pack(side = 'left')
usertext4 = StringVar()
Entry4 = Entry(rahmen7,textvariable = usertext4)
Entry4.insert(0, "4")
Entry4.pack(side = 'left')

#----------------------------BUTTON-------------------

Button1 = Button(rahmen9,text='Get Data', command = get_start, font = 'bold')
Button1.config (width=40, height = 3)
Button1.pack( )

label5 = Label(rahmen10, text = 'hall', font = 'Calibri 10 ')
label5.pack(side = 'top')


statusbar = Label(text="##################",anchor =W)
statusbar.pack(side='bottom', anchor = W, fill = X)


#get_input()




window.mainloop()
Antworten