Am 04.01.14 11:17, schrieb eneskri...@gmail.com:
So the issue is like this. I have to make a 2 x N grid like this:
o Radio - 1 o Radio - 2
o Radio - 3 o Radio - 4
...
o Radio - N - 1 o Radio - N

How to do so with a loop?


Create the buttons and append them into a list, so you can later refer to them. Use grid() to create the layout you want (the text widget is an alternative) Make sure you set the same variable and different "values", so that the radiobuttons can distinguish which one is selected. The rule is:

1) If the associated variable has the value of "value", the button is selected

2) If the associated variable has a different value, the button is not selected (thus you can implement selecting nothing by setting the variable to some bogus value)

3) For Ttk widgets: If the variable is undefined, the button is in the third state

I'm not sure Tkinter handles case 3, because if you delete the variable object by letting it go out of scope, there is probably no way to reattach it to the buttons. And there is no unset method, let alone a translation from unset variables to None if you do it by bypassing Tkinter:

Apfelkiste:~ chris$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> t=Tkinter.Tk()
>>> s=Tkinter.StringVar()
>>> s.set('Hello')
>>> s.get()
'Hello'
>>> t.eval('unset ' + str(s))
''
>>> s.get()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 255, in get
    value = self._tk.globalgetvar(self._name)
_tkinter.TclError: can't read "PY_VAR0": no such variable
>>>


IMHO the last call should translate an unset variable to None to by useful for three-state widgets. You can still do it manually by invoking the widget's state() method

        Christian
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to