Megint elővettem a Tkintert, hogy ismerkedjek vele. (Egyszer már belebuktam vagy egy éve :)) Akkor valahonnan letöltöttem egy mintát, amin egy frame-ben van editálható szövegmező, gombok, beviteli ablak, szóval efféle alapdolgok, hogy piszkálgathassam.
Akkor is azon buktam meg, hogy ez a frame átméretezhető volt ugyan alapból, de a benne levő szövegmező ugyanakkora méretű maradt és így nagyon gáz.
1. Nem találok megfelelő metódust hozzá: resize vagy hasonló szinonimákat keresek. Förmedjetek rám, hogy nem is úgy kell, csak akkor hogyan?
2. A .grid használatával nem saját magam akadályozom az átméretezhetőséget?
Szerk.: Hogy ne csak a levegőbe beszéljek, az ide vágó részlet:
root = Tk()
root.title("System beta version")
root.usrtext = Text(root, bg = "light yellow", fg = "black",relief=SUNKEN)
root.usrtext.grid(row=0, columnspan=16, rowspan=2, sticky=W+E+N+S, padx=5, pady=5)
root.fname = StringVar()
root.fname = ""
filestring = StringVar()
root.last_saved_text=StringVar()
root.last_saved_text=""
root.compiled_text=StringVar()
root.compiled_text=""
cimke1 = Label(root, text="Variable:").grid(row=3, sticky=W, padx=5)
cimke2 = Label(root, text="Value:").grid(row=4, sticky=W, padx=5)
cimke3 = Label(root, text="Subroutine:").grid(row=5, sticky=W, padx=5)
cimke4 = Label(root, textvariable=filestring, font=("Arial Black", 10)).grid(row=6, columnspan=16, padx=5, sticky=W)
mezo1 = Entry(root, bg = "light cyan", fg = "black", relief=SUNKEN)
mezo1.grid(row=3, column=1, sticky=W)
mezo2 = Entry(root, bg = "light cyan", fg = "black", relief=SUNKEN)
mezo2.grid(row=4, column=1, sticky=W)
mezo3 = Entry(root, bg = "light cyan", fg = "black", relief=SUNKEN)
mezo3.grid(row=5, column=1, sticky=W)
gomb1 = Button(root, text='Read', height=1, width=4, relief=RAISED, command=readvar)
gomb1.grid(row=3, column=2)
gomb2 = Button(root, text='Write', height=1, width=4, relief=RAISED, command=writevar)
gomb2.grid(row=4, column=2)
gomb3 = Button(root, text='Execute', height=1, width=4, relief=RAISED, command=executesub)
gomb3.grid(row=5, column=2)
gomb4 = Button(root, text='Run / load', height=1, width=10, relief=RAISED, command=compile)
gomb4.grid(row=4, column=14)
app = App(root)
i=DeviceExplore()
errorstring=DeviceVersnr()
if (i==0):
errorstring=DeviceVersnr()
if showerror('Error !','There is no connection\n%s.' % errorstring):
root.destroy()
if (i==-1):
errorstring='Chip was found but cannot be claimed'
if showerror('Error !','%s' % errorstring):
root.destroy()
if (i>1):
errorstring='Conflict: more than one chip was found'
if showerror('Error !','%s' % errorstring):
root.destroy()
if (i==1):
DeviceSetMyBuffer(root.usrtext.get(1.0,END))
root.mainloop()
- 2621 megtekintés
Hozzászólások
Rövid tanács: korrigáld az oszlopok a weight/columnweight/colweight/ahogy az inter hívja értékeit, és szintúgy a bennük lévő objektumokét. Ez az, ami megadja, hogy átméretezéskor milyen arányban nőhet/csökkenhet egymáshoz képest az elemek mérete. Ha az alapértelmezett 0 él, akkor sehogy.
Ha teljesen vaktában indultál el, javaslom, hogy tedd fel a vtcl nevű Tcl/Tk idét, ami manapság sutának néz ki (az is), de megmutatja, hogy a tkinter alatt működő Tk-s widgetek milyen tulajdonsággal vannak felruházva, ill. az ablakok és az azok elhelyezéséért felelő menedzserek viselkedésének felfedezésében sokat segít.
(Valószínűleg létezik direkt pythonhoz jobb, intert tudó ide - de azt belőlem ki nem húzod.)
- A hozzászóláshoz be kell jelentkezni
Hát igen... ha érteném, miről van szó.
A "vtcl ide" összetételből az "ide" nekem egy környezetet sejttet. De hol?
apt-get install nem ismer ilyet, python is kiröhög, ha import vtcl -lel próbálkozom.
- A hozzászóláshoz be kell jelentkezni
http://sourceforge.net/projects/vtcl/
dpkg -i vtcl-1.6.0_all.deb
8.4-es Tk és Tcl kell neki, ezért azokat (is) tedd fel (úgyis szól a dpkg).
Valószínűleg frissebb van már a gépeden, ezért kicsit piszkálni kell, pl. így:
edit /var/lib/vtcl-1.6.0/vtcl.tcl
exec wish "$0" "$@" -ből legyen
exec wish8.4 "$0" "$@"
Aztán:
vtcl
((De ha "csak" annyi a célod, hogy ablakozó appokkal kezdj ki, ma már inkább a java swingjével (minimum) barátkozz. A Tk-ra és leszármazottaira csak akkor érdemes időt szánni, ha tudod, hogy miért kellenek pont azok.))
- A hozzászóláshoz be kell jelentkezni
Multiplatformos GUI a cél, amibő hívhatok C-t. Pythonból ez megy, a Java-t nem ismerem, a java swingről meg nem tudom, eszik vagy isszák.
Nem ragaszkodok sem pythonhoz, sem tkinterhez, a hátam közepébe nem kívánom, de mi a legprimitívebb multiplatformos GUI?
Mit javasolsz?
- A hozzászóláshoz be kell jelentkezni
Valószínűleg a legprimitívebb multiplatformos gui a html + cgi (a háttérben a kedvenc nyelvvel) - de komolyságom megkérdőjelezhető.
Ha a C-hívást úgy is lehet érteni, hogy a C-ben megírt programot meghívod, akkor a legprimitívebb a Tcl + Tk, amelyből a Tk a tkinter által is használt eszköztár. De valószínűleg nem lehet, így tkp. ráéreztél: a pythonból előbb fogsz C-t hívni, mint a Tcl-ből (az sem lehetetlen, de amikor ilyet műveltem, a Tcl API doknak már a fele se volt igaz - ez javulhatott/romolhatott azóta).
Szóval továbbra is merem ajánlani a gui viselkedésének feltérképezéséhez a vtcl-t, és mellesleg ezt (a vtcl-től elszakadva itt lehet tk8.5-doc is):
apt-get install tk8.4-doc
dpkg -L tk8.4-doc
Ez mindazon eszközök manjának listája, amelyek a Tk fennhatósága alá tartoznak. Tkinterben is ezeket használod, "csak" a megszólításuk más.
Pl. a fentebb említett column weight így működik:
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/grid-config.html
(A swing az a gui eszköztár, amellyel a legtöbb javás appot megírták; a java "Tk-ja".)
- A hozzászóláshoz be kell jelentkezni
Köszi a kimerítő választ.
- A hozzászóláshoz be kell jelentkezni
Legyunk kicsit korrektebbek ennel, az AWT a Java Tk-ja, a Swing az inkabb a Gtk/Qt vonalra hajaz inkabb.
--
Blog | @hron84
Üzemeltető macik
- A hozzászóláshoz be kell jelentkezni
Ahogy lx irta, a sor/oszlop súlyozást kell beállítani.
root.rowconfigure(0,weight=1)
root.columnconfigure(4,weight=1)
Ez csak az első sort és az ötödik oszlopot fogja növelni, amikor átméretezed az ablakot.
A Text widget esetében valószínűleg ezt akarod, de többinél nem biztos. Mivel mindent egy konténerbe raktál, valami szinte mindig úgy fog csúszni, hogy az nem tetszik.
Sokkal rugalmasabb, ha a Label/Entry/Button külön Frame-be kerül. A Frame kb a HTML div megfelelője. A root ablakban csak Frame elemek legyenek, azokat állítsd be, hogy úgy méreteződjenek, ahogy neked tetszik és utána az elemek mehetnek ezekbe bele.
- A hozzászóláshoz be kell jelentkezni