Seite 1 von 1

interaktives Tkinter fenster

Verfasst: Donnerstag 16. Dezember 2004, 15:43
von powerslide
Hallo,

nachdem ich mein progrämmchen nun "fertig" habe wollte ich dem ganzen eine gui spendieren

sieht auch schon ganz gut aus.. aber es fehlen noch einige sachen.. und da komme ich einfach nicht weiter..

also hier erstmal mein tkinter code:

Code: Alles auswählen

from Tkinter import *
from tkFileDialog import *

def get_dir():
    path.insert(0,askdirectory())

def get_file():
    datei.insert(0,askopenfilename())

def can():
    old1 = path["state"]
    old2 = datei["state"]
    path["state"] = "normal"
    datei["state"] = "normal"                 
    path.delete(0,END)
    datei.delete(0,END)
    path["state"] = old1
    datei["state"] = old2

def sing():
    path["state"] = "disabled"
    direct["state"] = "disabled"
    datei["state"] = "normal"
    dat["state"] = "normal"
    set_out('Please select a file for conversion.', 'y')

def mult():
    path["state"] = "normal"
    direct["state"] = "normal"
    datei["state"] = "disabled"
    dat["state"] = "disabled"
    set_out('Please select a directory to make the rogram search for files.\nNote: ALL xml files will be converted!', 'y')

def set_out(text, opt):
    text = text + '\n--------------------------------------------------------------------------------------------------------------------------\\n'
    ausgabe["state"] = "normal"
    if (opt == 'y'):
        ausgabe.delete(1.0,END)
    ausgabe.insert(END, str(text))
    ausgabe["state"] = "disabled"

root=Tk()

frame=Frame(root)
frame.pack(expand=YES)

root.title('XML converter vol 1.0')

selectrahmen = Frame(root, relief="groove", borderwidth="2")
selectrahmen.pack(fill="x")

select1 = Frame(selectrahmen)
select1.pack(fill="x")
select2 = Frame(selectrahmen)
select2.pack(fill="x")

selectLab = Label(select1, text='Would you like to convert a single file or multiple files?')
selectLab.pack(side = "top", anchor="w")

v = IntVar()
Radiobutton(select2, text="single", variable=v, value=1, command=lambda: sing()).pack(side="left")
Radiobutton(select2, text="multiple", variable=v, value=2, command=lambda: mult()).pack(side="left")
v.set('1')
        
eingaberahmen = Frame(root, relief="groove", borderwidth="2")
eingaberahmen.pack(fill="x")

suchDatei = Label(eingaberahmen, text = 'File: ')
suchDatei.grid(row=1,column=1)

datei = Entry(eingaberahmen, width=45)
datei.grid(row=1,column=2)

dat = Button(eingaberahmen, text = 'search', command=lambda: get_file())
dat.grid(row=1,column=3)

suchPfad = Label(eingaberahmen, text = 'Directory: ')
suchPfad.grid(row=2,column=1)

path = Entry(eingaberahmen, width=45, state='disabled')
path.grid(row=2,column=2)

direct = Button(eingaberahmen, text = 'search',state='disabled', command=lambda: get_dir())
direct.grid(row=2,column=3)

eingaberahmen2 = Frame(root)
eingaberahmen2.pack()

cancel = Button(eingaberahmen2, text = 'Cancel', command=lambda: can())
cancel.pack(side='left')
ok = Button(eingaberahmen2, text = 'OK')
ok.pack(side='left')

ausgaberahmen = Frame(root, relief="groove", borderwidth="2")
ausgaberahmen.pack(fill="x")

ausgabeLab = Label(ausgaberahmen, text = 'Messagescreen').pack(side = "top", anchor="w")

ausgabe = Text(ausgaberahmen, width=61, height=5, state='disabled', bg='white')
ausgabe.pack()
set_out('Please select a file for conversion.', 'y')

root.mainloop()
das ganze macht nicht viel.. aber mehr muss es nicht machen.. naja okay.. es fehlt ein ausgabefenster

also .. was mir noch fehlt:

- es sollte standardmässig "single" angewählt sein
- wird "multiple" angewählt soll das "file" entry grau hinterlegt und gesperrt werden

- wird das ganze dann per ok gestartet sollen dann die print meldungen in einem entry oder so unterhalb des ok buttons ausgegeben werden.. wenn das geht..

könnt ihr mir da helfen?

wäre super

gruß

slide

EDIT mawe: hab mal die Einrückung im Code gerichtet
EDIT mawe: und gleich nochmal, weil ich beim ersten mal zu blöd dazu war

Verfasst: Donnerstag 16. Dezember 2004, 15:56
von mawe
Hi!

Also zu deinem ersten Problem: da sollte ein

Code: Alles auswählen

self.varKnopf.set(objekte['single'])   # oder
self.varKnopf.set('single')
genügen.

Gruß, mawe

Verfasst: Freitag 17. Dezember 2004, 14:03
von powerslide
hello again,

so hab mal meinen code aktualisiert..
das mit den klassen hab ich ersma aufgegeben.. :?

naja dafür macht der code schonmal ziemlich viel von dem was ich will...

das einzige was mir noch fehlt.. ist das ausgabe-fenster..

dachte erst an ein entry, welches ich immer wieder aktualisiere ..
aber da das ja nur einzeilig ist ist das doof ..

also ein text objekt..

hab gedacht ich mach auch wieder viel mit dem state attribut.. d.h. state zuerst disablen..

dann um eine zeile hinzuzufügen state kurz auf normal setzen.. dann zeile ranhängen.. dann wieder disablen..

soweit schön und gut.. die theorie..

aber wie mach ich das.. also vorallem die sache mit dem zeile ranhängen und dann .. weil könnte ja durchaus mehr werden.. nen scrollbalken aktivieren ...

so ich mach derweil weiter und kümmere mich um die sicherheitsabfrage..

besten dank schonmal..

grüße

slide

[STATUS] okay also das mit den Zeilen anhängen hab ich geschafft.. gar nicht so schwer :)

Verfasst: Freitag 17. Dezember 2004, 14:34
von mawe
Hi!

Wenn Du ein Textfeld mit Scrollbalken haben willst, nimm doch gleich ein ScrolledText :wink:

Gruß, mawe

Verfasst: Freitag 17. Dezember 2004, 14:52
von powerslide
*hust*

ja.. mal wieder super genial... :wink:

kann man das noch automatisch mitscrollen lassen?

Verfasst: Freitag 17. Dezember 2004, 15:21
von mawe
Hi!

Ja. Mit see. Kleines Beispiel:

Code: Alles auswählen

from Tkinter import *
from ScrolledText import ScrolledText
import time

def go():
	for i in range(100):
		st.insert(END,"%i\n" % i)
		st.see(END)
		time.sleep(0.5)
		root.update()

root = Tk()
st = ScrolledText(width=10,height=5)
st.pack()
Button(text="Go",command=go).pack()
root.mainloop()
Gruß, mawe