layout problem

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

layout problem

Beitragvon Torsten2005 » 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

Beitragvon Python 47 » 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:

Beitragvon jAN » 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:

Beitragvon Torsten2005 » 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:

Beitragvon jAN » 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:

Beitragvon Torsten2005 » 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

Beitragvon SG » 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

Beitragvon HWK » 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

Beitragvon HWK » 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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder