Zwei kurze Fragen

Fragen zu Tkinter.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ach du hast noch nicht mal die Bilder in den Speicher geladen. Dazu gibt es die Klasse Tkinter.PhotoImage oder Tkinter.BitmapImage. Wie es mit der PIL funktioniert steht auch dabei.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

nochmal eine kurze frage:

wie kann man dem schließen des Fensters duch das rote X noch methoden hinzufügen?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi questlove

Code: Alles auswählen

app_win.protocol("WM_DELETE_WINDOW", close_app_win)
Gruß wuf :wink:
Take it easy Mates!
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

wie mache ich es am besten die widgets in einem Fenster zu platzieren? Zur Zeit habe ich es mit "anchor = W" in der pack-methode gemacht, jedoch kann ich dann nur immer untereinander zum Beispiel Radiobuttons, erzeugen. Ich hätte aber gerne untereinander und nebeneinander radiobuttons(Die aber untereinander nichts miteinander zu tun haben. Sozusagen kann man bei den untereinander etwas auswhlen und bei den nebeneinander am Rand vom Fenster. Wie muss ich sie platzieren?

LG
BlackJack

@questlove: Du könntest die zusammengehörenden Widgets in einen `Frame` stecken (mit `pack()` oder `grid()`) und die `Frame`\s dann in das Fenster (mit `pack()` oder `grid()`). Mit `pack()` kann man nicht nur untereinander, sondern auch nebeneinander anordnen. Aber innerhalb eines Container-Widgets bitte immer nur in eine Richtung, sonst wird es unverhersehbar was die Layout-Engine daraus macht.
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

Iwie gehts bei den radiobuttons aber nicht..
Die kann ich dann auch nur noch untereinander zeigen.
beispiel mit und ohne Radiobuttons..

ohne:

Code: Alles auswählen

import Tkinter as tk
class hauptprogramm():
    def __init__(self,root):
        
        #bestimmung von root
        self.root = root
        Programmbreite      = 1000
        Programmhoehe       = 700
        ProgrammX_Position  = 100
        ProgrammY_Position  = 100

        root.geometry('%dx%d+%d+%d' % (Programmbreite,
                               Programmhoehe,
                               ProgrammX_Position,
                               ProgrammY_Position))
        Programmname = 'Notationsprogramm'
        root.maxsize(Programmbreite, Programmhoehe)
        root.title(Programmname)
        
        x= tk.Frame(width=800,height=800,relief=tk.RAISED,background="yellow")
        w=xD(x)
        
        x.pack()
        
        
        

class xD(tk.Canvas):
    def __init__(self,master):
        xpos=0
        ypos=0
        width=600
        height=600
        tk.Canvas.__init__(self,master,
                            border = 4,
                            relief = 'ridge',
                            background = 'White'
            )
        self.place(x=xpos,y=ypos,width=width,height=height)
        self.bind("<a>", self.key)
        self.bind("<Button-1>", self.callback)

    def key(self,event):
        self.focus_set()
        print "pressed"

    def callback(self,event):
        self.focus_set()
        print "clicked at", event.x, event.y


root = tk.Tk()
x = hauptprogramm(root)

root.mainloop()
mit:

Code: Alles auswählen

import Tkinter as tk
class hauptprogramm():
    def __init__(self,root):
        
        #bestimmung von root
        self.root = root
        Programmbreite      = 1000
        Programmhoehe       = 700
        ProgrammX_Position  = 100
        ProgrammY_Position  = 100

        root.geometry('%dx%d+%d+%d' % (Programmbreite,
                               Programmhoehe,
                               ProgrammX_Position,
                               ProgrammY_Position))
        Programmname = 'Notationsprogramm'
        root.maxsize(Programmbreite, Programmhoehe)
        root.title(Programmname)
        
        x= tk.Frame(width=800,height=800,relief=tk.RAISED,background="yellow")
        w=xD(x)
        
        # Optionen fuer die Radiobutton der vorzeichenauswahl
        radio_opt_V = options = {}
        # statt den Kreisen mit dem Punkt zum auswaehlen der abgesenkte Button
        options['indicatoron'] = False
        options['width'] = 73
        options['selectcolor'] = 'pink'
     
        self.vvv = tk.IntVar()
        self.b_vorzeichen = tk.Radiobutton(x,text="Hallo",variable = self.vvv, value = 1, **radio_opt_V)
        self.b_vorzeichen.pack(anchor = tk.W)
        self.kein_vorzeichen = tk.Radiobutton(x,text="Halloelei",variable = self.vvv, value = 2, **radio_opt_V)
        self.kein_vorzeichen.pack(anchor = tk.W)
        self.kreuz_vorzeichen = tk.Radiobutton(x,text="Hallleee",variable = self.vvv, value = 3, **radio_opt_V)
        self.kreuz_vorzeichen.pack(anchor = tk.W)
        
        x.pack()
        
        
        

class xD(tk.Canvas):
    def __init__(self,master):
        xpos=0
        ypos=0
        width=600
        height=600
        tk.Canvas.__init__(self,master,
                            border = 4,
                            relief = 'ridge',
                            background = 'White'
            )
        self.place(x=xpos,y=ypos,width=width,height=height)
        self.bind("<a>", self.key)
        self.bind("<Button-1>", self.callback)

    def key(self,event):
        self.focus_set()
        print "pressed"

    def callback(self,event):
        self.focus_set()
        print "clicked at", event.x, event.y


root = tk.Tk()
x = hauptprogramm(root)

root.mainloop()
BlackJack

@questlove: Naja, wenn Du *keine* Radiobuttons im Programm hast, dann können die natürlich auch nicht nebeneinander angezeigt werden. Wie man Widgets nebeneinander packt steht zum Beispiel hier: The Tkinter Pack Geometry Manager.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi questlove

Hier etwas Code zum herumspielen:

Code: Alles auswählen

import Tkinter as tk

class HauptProgramm():
    
    def __init__(self, root):
       
        #bestimmung von root
        self.root = root
        Programmbreite      = 1000
        Programmhoehe       = 700
        ProgrammX_Position  = 100
        ProgrammY_Position  = 100

        root.geometry('%dx%d+%d+%d' % (Programmbreite, Programmhoehe,
            ProgrammX_Position, ProgrammY_Position))
            
        PROGRAMM_NAME = 'Notationsprogramm'
        
        root.maxsize(Programmbreite, Programmhoehe)
        root.title(PROGRAMM_NAME)
       
        vertical_frame = tk.Frame(relief=tk.RAISED, bg="yellow")
        vertical_frame.pack(side='left', anchor=tk.NW)

        horizontal_frame = tk.Frame(relief=tk.RAISED)
        horizontal_frame.pack(side='right', anchor='ne')
        
        w = xD(vertical_frame)
       
        # Optionen fuer die Radiobutton der vorzeichenauswahl
        vert_options = {}
        # statt den Kreisen mit dem Punkt zum auswaehlen der abgesenkte Button
        vert_options['indicatoron'] = False
        vert_options['width'] = 25
        vert_options['selectcolor'] = 'pink'
     
        self.vvv = tk.IntVar()
        
        self.b_vorzeichen = tk.Radiobutton(vertical_frame, text="Hallo",
            variable=self.vvv, value=1, **vert_options)
        self.b_vorzeichen.pack()
        
        self.kein_vorzeichen = tk.Radiobutton(vertical_frame, text="Halloelei",
            variable=self.vvv, value = 2, **vert_options)
        self.kein_vorzeichen.pack()
        
        self.kreuz_vorzeichen = tk.Radiobutton(vertical_frame, text="Hallleee",
            variable=self.vvv, value=3, **vert_options)
        self.kreuz_vorzeichen.pack()
    
        horiz_options = {}
        # statt den Kreisen mit dem Punkt zum auswaehlen der abgesenkte Button
        horiz_options['indicatoron'] = False
        horiz_options['width'] = 25
        horiz_options['selectcolor'] = 'darkolivegreen1'
 
        self.horiz_opt_var = tk.IntVar()
        
        self.radio_but_1 = tk.Radiobutton(horizontal_frame, text='Option-1',
            variable=self.horiz_opt_var, value = 1, **horiz_options)
        self.radio_but_1.pack(side='left')
        
        self.radio_but_2 = tk.Radiobutton(horizontal_frame, text='Option-2',
            variable=self.horiz_opt_var, value = 2, **horiz_options)
        self.radio_but_2.pack(side='left')
 
        self.radio_but_3 = tk.Radiobutton(horizontal_frame, text='Option-3',
            variable=self.horiz_opt_var, value = 3, **horiz_options)
        self.radio_but_3.pack(side='left')
       
class xD(tk.Canvas):
    
    def __init__(self,master):
        xpos=0
        ypos=0
        width=600
        height=600
        tk.Canvas.__init__(self,master,
                            border = 4,
                            relief = 'ridge',
                            background = 'White'
            )
        self.place(x=xpos,y=ypos,width=width,height=height)
        self.bind("<a>", self.key)
        self.bind("<Button-1>", self.callback)

    def key(self,event):
        self.focus_set()
        print "pressed"

    def callback(self,event):
        self.focus_set()
        print "clicked at", event.x, event.y

root = tk.Tk()
x = HauptProgramm(root)

root.mainloop()
Da ich Teile von deinem Script übernommen habe etspricht er nicht der PEP-8 Norm. Aber nehme dir doch einmal Zeit PEP-8 (Leitfaden für Pythonprogrammierer) näher anzusehen (lesen).

Gruß wuf :wink:
Take it easy Mates!
Antworten