Radioboxen erstellen

Fragen zu Tkinter.
Antworten
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

Edit (Leonidas): Vom Thread "Ordner verschieben" abgetrennt.

Danke!
Hat mir sehr weitergeholfen.

Aber noch eine weitere Frage: Ich möchte mit Tkinter Radioboxen erzeugen, aber es gelingt mir nicht.

Code: Alles auswählen

global v
v = IntVar()
c1 = Radiobutton(root, text="Option1", variable=v, value=1).place(x=15, y=100)
c2 = Radiobutton(root, text="Option2", variable=v, value=2).place(x=150, y=100)
Wenn ich versuche, die Variable v auszulesen, erhalte ich immer PY_VAR0 als Ergebnis.

mfg baracuda
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eigentlich ist es angebracht, für neue Fragen auch neue Threads zu eröffnen, da die Threads hier nach Themen und nicht nach den Fragen eines Users gegliedert sein sollten. Das klappt in der Praxis nicht immer, weil man mitunter aus dem Zusammenhang der eigentlichen Frage, weitere Fragen stellt und die dann so langsam offtopic werden, aber in deinem Fall sollte IMHO definitiv ein neuer aufgemacht werden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

snafu hat geschrieben: aber in deinem Fall sollte IMHO definitiv ein neuer aufgemacht werden.
Ich habe es mal abgetrennt, aber snafu hat natürlich Recht - neue Frage, neuer Thread. Bitte das nächste mal selbst beachten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

baracuda hat geschrieben:Aber noch eine weitere Frage: Ich möchte mit Tkinter Radioboxen erzeugen, aber es gelingt mir nicht.
Hier findest du ein gut dokumentiertes Beispiel - das sollte helfen: http://effbot.org/tkinterbook/radiobutton.htm

Vom place()-Geometriemanager solltest du dich schnell verabschieden - damit ist deine GUI sehr unflexibel. Mein Favorit: pack().

Was dein "global" angeht: Auf Moduleben ist es überflüssig.
Wenn du es tatsächlich irgendwo einsetzen sollen wolltest: Versuch es zu vermeiden, es ist keine gute Sache.

Und: Du hast Tkinter vermutlich über *-Import eingebunden. Auch das solltest du eher vermeiden. Bewährt ist:

Code: Alles auswählen

import Tkinter as tk
abgdf

Mein Beispielcode für Radiobuttons sieht so aus:

Code: Alles auswählen

#!/usr/bin/env python

import Tkinter
import tkMessageBox

class myWindow:

    def __init__(self):

        self.mw = Tkinter.Tk()
        self.mw.option_add("*font", ("Arial", 15, "normal"))
        self.mw.geometry("+250+200")

        self.colour = Tkinter.Variable()

        self.rb1 = Tkinter.Radiobutton(self.mw, text = "Red", variable = self.colour, value = "Red")
        self.rb2 = Tkinter.Radiobutton(self.mw, text = "Yellow", variable = self.colour, value = "Yellow")
        self.rb3 = Tkinter.Radiobutton(self.mw, text = "Green", variable = self.colour, value = "Green")

        self.rb2.select()

        self.rb1.pack()
        self.rb2.pack()
        self.rb3.pack()

        self.btn1 = Tkinter.Button(self.mw, text = "Ok", command = self.btnClick)
        self.btn1.pack()

        self.btn2 = Tkinter.Button(self.mw, text = "Exit", command = self.mw.destroy)
        self.btn2.pack()

        self.mw.mainloop()

    def btnClick(self):
        a = self.colour.get()
        tkMessageBox.showinfo(title = 'Your selection', message = "The selected colour is: " + a)

if __name__ == "__main__":
   app = myWindow()
Und dazu meine Erläuterung:
Radiobuttons are very useful, if the user should make a single choice between several possibilities.

In the script we create three radiobuttons "rb1", "rb2" and "rb3" and sign them with "Red", "Yellow" and "Green" (this could be the selection for a colour of a car for example).
The radiobuttons are connected by sharing the same variable "colour". We have to use a special "Tkinter.Variable"-object for the "colour"-variable.
Passing the "value"-argument, we define, what value should be assigned to the variable "colour", if the radiobutton is selected.
Using the ".select()"-method, we make radiobutton "rb2" the default-selection.
When "btn1" is clicked, the method "btnClick" is run. We need to use the ".get()"-method of the "Tkinter.Variable"-object "colour" to get its value as a Python-string. This value is then displayed in the "tkMessageBox".
HTH
Antworten