layout problem

Fragen zu Tkinter.
Antworten
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Samstag 3. Juni 2006, 20:34

Hallo, hab ein Problem mit den Widgetsanordnungen .
1. Die Radiobutton sollen ganz links , die M1-M5 Buttons sollen ganz rechts.
2. Die Scrollbar 2 soll direkt an die Listbox und der Abstand zum Textfeld soll aber bleiben . Muss ich dazu Frame4 aufteilen?

Bild

Code: Alles auswählen

from time import *
from Tkinter import *
class Oberflaeche:
	def __init__(self):
		#Widget instanzieren
		self.fenster = Tk()
		self.fenster.title('Musterfinden')
		
		self.variable_radiobutton=IntVar()
						
		self.frame5=Frame(master=self.fenster)
		self.frame1=Frame(master=self.frame5) # für Radiobuttons Auswahl Indexe
		self.frame2=Frame(master=self.frame5) # für 2 Buttons Kurse laden 8alt und neu       #hier Zeile 20
		self.frame3=Frame(master=self.frame5) # für Buttons Muster suchen  (m1  - m10)
		self.frame4=Frame(master=self.fenster) # für Textfeld als Ausgabe und Listbox der Aktien des Index
				
		self.dax=Radiobutton(master=self.frame1,text='Dax',value=1, variable=self.variable_radiobutton).grid(column=0, row=0) 
		self.mdax=Radiobutton(master=self.frame1,text='MDax',value=2, variable=self.variable_radiobutton).grid(column=1, row=0)
		self.tecdax=Radiobutton(master=self.frame1,text='TecDax',value=3, variable=self.variable_radiobutton).grid(column=2, row=0)
		self.stoxx=Radiobutton(master=self.frame1,text='Stoxx50',value=4, variable=self.variable_radiobutton).grid(column=3, row=0)
		
		self.k1_Button=Button(master=self.frame2, text='K_alt',width=10,command=self.K1).grid(column=0, row=0)
		self.k2_Button=Button(master=self.frame2, text='K_neu',width=10,command=self.K2).grid(column=1, row=0)
		
		self.m1Button=Button(master=self.frame3, text='M1',command=self.m1).grid(column=0, row=0)
		self.m2Button=Button(master=self.frame3, text='M2',command=self.m2).grid(column=1, row=0)
		self.m3Button=Button(master=self.frame3, text='M3',command=self.m3).grid(column=2, row=0)
		self.m4Button=Button(master=self.frame3, text='M4',command=self.m4).grid(column=3, row=0)
		self.m5Button=Button(master=self.frame3, text='M5',command=self.m5).grid(column=4, row=0)
				
		self.scrollbar1=Scrollbar(master=self.frame4)
		self.scrollbar2=Scrollbar(master=self.frame4)
		
		self.liste_Index=Listbox(master=self.frame4,selectmode=SINGLE,width=25,height=46)
		self.ausgabe=Text(master=self.frame4 , font=('Arial',10),width=90,height=40,yscrollcommand=self.scrollbar1.set)
		self.scrollbar1.config(command=self.ausgabe.yview)
		self.scrollbar2.config(command=self.liste_Index.yview)
		
		self.layout()                                           #für die Übersicht eine extra Methode pack
		self.fenster.mainloop()
			
	
	def layout(self):
		self.frame1.pack(side=LEFT)
		self.frame2.pack(side=LEFT,padx=20)
		self.frame3.pack(side=RIGHT,padx=20)
		self.frame5.pack(side=TOP,pady=35)
		self.frame4.pack(anchor=CENTER)
						
		self.liste_Index.pack(side=LEFT)
		self.scrollbar2.pack(side=LEFT,fill =Y,padx=20)
		self.ausgabe.pack(side=LEFT)
		self.scrollbar1.pack(side=RIGHT,fill =Y)
		
	##############################################	
	#Radiobutton haben die Kontrollvariable "variable_radiobutton "	
	
	def K1(self):
		pass
	def K2(self):
		pass
	
	def m1(self):
		pass
	def m2(self):
		pass
	def m3(self):
		pass
	def m4(self):
		pass
	def m5(self):
		pass
	
	def loeschen(self):
		pass
#Hauptprogramm
b=Oberflaeche()
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Samstag 3. Juni 2006, 20:35

Mach mal bittte das Bild kleiener, das ist ja verdammt groß! :?
mfg

Thomas :-)
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

Samstag 3. Juni 2006, 21:33

Code: Alles auswählen

self.scrollbar2.pack(side=LEFT,fill =Y,padx=20, anchor=LEFT)

Code: Alles auswählen

self.frame1.pack(side=LEFT,anchor=LEFT)

Code: Alles auswählen

self.frame3.pack(side=RIGHT,padx=20,anchor=RIGHT)
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Samstag 3. Juni 2006, 21:50

mm wenn dann anchor=W oder anchor=E ?
neu

Code: Alles auswählen

def layout(self):
		self.frame1.pack(side=LEFT,anchor=W)
		self.frame2.pack(side=LEFT,padx=20)
		self.frame3.pack(side=RIGHT,padx=20,anchor=E)
		self.frame5.pack(side=TOP,pady=35)
		self.frame4.pack(anchor=CENTER)
						
		self.liste_Index.pack(side=LEFT)
		self.scrollbar2.pack(side=LEFT,fill =Y,padx=20,anchor=W)
		self.ausgabe.pack(side=LEFT)
		self.scrollbar1.pack(side=RIGHT,fill =Y)
		
ergibt aber keine Änderung.
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

Sonntag 4. Juni 2006, 08:11

ups... ja... ich hatte grad nur grad keine python zur hand...
ja aber so müsste es funktionieren... (anchor=N oder/und E oder/und S oder/und W)
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Sonntag 4. Juni 2006, 09:31

nee , geht leider nicht, wobei ja eigentlöich von der logik side=RIGHT ausreichen müsste, aber anchor=W ergibt keine Änderung !

Vielleicht geht Frame5 nur bis dahin und nicht über die voll Breite des Textfeldes + Listbox ??

Und gibt es eine Möglichkeit einen Abstand nur zu einer Seite zu bekommen, also padx=10 macht ja einen Abstand nach links und rechts ??
SG
User
Beiträge: 12
Registriert: Sonntag 3. Juli 2005, 15:19

Freitag 30. Juni 2006, 09:35

Ich habe auch ein kleines Problem mit dem layout.

Gibt es eine Möglichkeit ein HintergrundBILD für einen "ScrolledText" bzw. "Text" - Widget zu definieren?

vielen dank
mfg
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 30. Juni 2006, 13:25

Du hast die Lösungen schon selbst vermutet. Frame 5 muss auf die volle Breite ausgedehnt werden und Frame 4 aufgeteilt. Abstand nur zu einer Seite wäre schön, geht aber wohl nicht.
Wie sieht das jetzt aus:

Code: Alles auswählen

class Oberflaeche: 
    def __init__(self): 
        #Widget instanzieren 
        self.fenster = Tk() 
        self.fenster.title('Musterfinden') 
        
        self.variable_radiobutton=IntVar() 
                        
        self.frame5=Frame(master=self.fenster) 
        self.frame1=Frame(master=self.frame5) # für Radiobuttons Auswahl Indexe 
        self.frame2=Frame(master=self.frame5) # für 2 Buttons Kurse laden 8alt und neu       #hier Zeile 20 
        self.frame3=Frame(master=self.frame5) # für Buttons Muster suchen  (m1  - m10) 
        self.frame4=Frame(master=self.fenster) # für Textfeld als Ausgabe und Listbox der Aktien des Index
        self.frame4a=Frame(master=self.frame4) #<--
        self.frame4b=Frame(master=self.frame4) #<--
                
        self.dax=Radiobutton(master=self.frame1,text='Dax',value=1, variable=self.variable_radiobutton).grid(column=0, row=0) 
        self.mdax=Radiobutton(master=self.frame1,text='MDax',value=2, variable=self.variable_radiobutton).grid(column=1, row=0) 
        self.tecdax=Radiobutton(master=self.frame1,text='TecDax',value=3, variable=self.variable_radiobutton).grid(column=2, row=0) 
        self.stoxx=Radiobutton(master=self.frame1,text='Stoxx50',value=4, variable=self.variable_radiobutton).grid(column=3, row=0) 
        
        self.k1_Button=Button(master=self.frame2, text='K_alt',width=10,command=self.K1).grid(column=0, row=0) 
        self.k2_Button=Button(master=self.frame2, text='K_neu',width=10,command=self.K2).grid(column=1, row=0) 
        
        self.m1Button=Button(master=self.frame3, text='M1',command=self.m1).grid(column=0, row=0) 
        self.m2Button=Button(master=self.frame3, text='M2',command=self.m2).grid(column=1, row=0) 
        self.m3Button=Button(master=self.frame3, text='M3',command=self.m3).grid(column=2, row=0) 
        self.m4Button=Button(master=self.frame3, text='M4',command=self.m4).grid(column=3, row=0) 
        self.m5Button=Button(master=self.frame3, text='M5',command=self.m5).grid(column=4, row=0) 
                
        self.scrollbar1=Scrollbar(master=self.frame4a) 
        self.scrollbar2=Scrollbar(master=self.frame4b) 
        
        self.liste_Index=Listbox(master=self.frame4a,selectmode=SINGLE,width=25,height=46) 
        self.ausgabe=Text(master=self.frame4b , font=('Arial',10),width=90,height=40,yscrollcommand=self.scrollbar1.set) 
        self.scrollbar1.config(command=self.ausgabe.yview) 
        self.scrollbar2.config(command=self.liste_Index.yview) 
        
        self.layout()                                           #für die Übersicht eine extra Methode pack 
        self.fenster.mainloop() 
            
    
    def layout(self): 
        self.frame1.pack(side=LEFT) 
        self.frame2.pack(side=LEFT,padx=20) 
        self.frame3.pack(side=RIGHT,padx=20) 
        self.frame5.pack(side=TOP,pady=35, fill=X) #<--
        self.frame4a.pack(side=LEFT) 
        self.frame4b.pack(side=RIGHT, padx=20) #<--
        self.frame4.pack(anchor=CENTER) 
                        
        self.liste_Index.pack(side=LEFT) 
        self.scrollbar1.pack(side=LEFT,fill=Y) 
        self.ausgabe.pack(side=LEFT) 
        self.scrollbar2.pack(side=RIGHT,fill=Y) 
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 30. Juni 2006, 19:38

Zwei andere Möglichkeiten wären:
1. Wenn es nur auf die Symmetrie ankommt, Frame 4a und 4b jeweils mit padx=10, also:

Code: Alles auswählen

    def layout(self): 
        self.frame1.pack(side=LEFT) 
        self.frame2.pack(side=LEFT,padx=20) 
        self.frame3.pack(side=RIGHT) 
        self.frame5.pack(side=TOP,pady=35,padx=10,fill=X) #<--
        self.frame4a.pack(side=LEFT, padx=10) #<-- 
        self.frame4b.pack(side=RIGHT, padx=10) #<-- 
        self.frame4.pack(anchor=CENTER) 
                        
        self.liste_Index.pack(side=LEFT) 
        self.scrollbar1.pack(side=LEFT,fill=Y) 
        self.ausgabe.pack(side=LEFT) 
        self.scrollbar2.pack(side=RIGHT,fill=Y) 
2. Wenn keine Ränder entstehen sollen, ein dritter Frame mit padx=10 in der Mitte von Frame 4a und 4b und diese ohne padx, also:

Code: Alles auswählen

        self.frame4=Frame(master=self.fenster) # für Textfeld als Ausgabe und Listbox der Aktien des Index 
        self.frame4a=Frame(master=self.frame4) #<-- 
        self.frame4b=Frame(master=self.frame4) #<--
        self.frame4c=Frame(master=self.frame4) #<--
                
    def layout(self): 
        self.frame1.pack(side=LEFT) 
        self.frame2.pack(side=LEFT,padx=20) 
        self.frame3.pack(side=RIGHT) 
        self.frame5.pack(side=TOP,pady=35,fill=X) 
        self.frame4a.pack(side=LEFT) #<-- 
        self.frame4c.pack(side=LEFT,padx=10) #<-- 
        self.frame4b.pack(side=RIGHT) #<-- 
        self.frame4.pack(anchor=CENTER) 
                        
        self.liste_Index.pack(side=LEFT) 
        self.scrollbar1.pack(side=LEFT,fill=Y) 
        self.ausgabe.pack(side=LEFT) 
        self.scrollbar2.pack(side=RIGHT,fill=Y) 
MfG
HWK
Antworten