Google Groupes n'accepte plus les nouveaux posts ni abonnements Usenet. Les contenus de l'historique resteront visibles.

Python Tk Tix GUI documentation & builder overview and tips

2 259 vues
Accéder directement au premier message non lu

bal...@googlemail.com

non lue,
27 mars 2009, 17:19:4227/03/2009
à
I have recently started development for a small video conversion
project using a GUI. After some research I decided to use Tkinter/Tix
(Tk/Tix). The reasons are mainly:

1. the GUI is rather simple, and

2. the end-user is not necessarily technically inclined so I want to
keep
a) required libraries as few as possible, and
b) installation as painless as possible.

3. Tk/Tix is included with Python. Thus only a Python installation is
needed. Nothing else.

4. Tk itsself misses some rudimentary widgets like meters, multi/colum
lists, grid and scrolled widgets. Tix provides those. Good enough for
my little application (more advanced and more modern widgets are
available in frameworks like Qt, Gtk, or wxWindows).


Before starting I spent some effort to find
a) relevant documentation,
b) GUI Builders which might help me,
c) answers to non-obvious questions.

The process took some time and effort so I want to share my findings:

a) Documentation resources

Python Docs
http://docs.python.org/library/tkinter.html
Tk Commands
http://www.tcl.tk/man/tcl8.5/TkCmd/contents.htm
Tix Reference
http://tix.sourceforge.net/man/html/contents.htm
Tix demo application
You want to extract the Tix demo application coming with the Tix
8.4.3 source distribution. It contains examples for many widgets -
unfortunately none for multi-column HList or the Grid (see below).
https://sourceforge.net/project/showfiles.php?group_id=5649&package_id=5704
Tix8.4.3-src.tar.gz, then look in /Tix8.4.3/Python/Demo/tix
Thinking in Tkinter
I recommend the "Individual programs online"
http://www.ferg.org/thinking_in_tkinter/index.html


b) GUI development tools

ActiveState GUI Builder (using grid layout)
SpecTcl is the predecessor of GUI Builder (by ActivaState).
http://spectcl.sourceforge.net/
FAQ (where to get source)
http://aspn.activestate.com/ASPN/Mail/Message/komodo-announce/3355346

PAGE v3.0 by Stewart Allen (using placer layout)
http://page.sourceforge.net/

There are many more for other GUI toolkits mentioned in this post:
http://mail.python.org/pipermail/python-list/2004-February/250727.html

Finally I decided to use the packer layout and create the widgets
manually. Just the simplest and quickest way for me.


c) How do I ...?

How do I use all methods available in the Tix Grid?

Tix Grid with full implementation of all methods
http://klappnase.bubble.org/TixGrid/index.html


How do I create a multi-column Tix.HList?

import Tkinter as Tk
import Tix

root = Tix.Tk()
# setup HList
hl = Tix.HList(root, columns = 5, header = True)
hl.header_create(0, text = "File")
hl.header_create(1, text = "Date")
hl.header_create(1, text = "Size")
# create a multi-column row
hl.add("row1", text = "filename.txt")
hl.item_create(entry_path, 1, text = "2009-03-26 21:07:03")
hl.item_create(entry_path, 2, text = "200MiB")

I haven't found out how to right-justify individual columns? Anyone?


How to implement Tk GUI with multiple threads?

Usually there are two options to make threads wait for an event:

* gui thread polling (lame)
see here how to use Tk.after() (actually a Tcl command) to poll
http://uucode.com/texts/pylongopgui/pyguiapp.html

see here how to imitate the Tk event loop to poll for non-Tk
events (a socket, for example)
https://sourceforge.net/project/showfiles.php?group_id=5649&package_id=5704
Tix8.4.3-src.tar.gz, then look in /Tix8.4.3/Python/Demo/tix/
tixwidgets.py, find loop()


* multithreaded with events (the option to choose)
Basically this uses bind and event_generate to send "Notify"
messages to the Tk instance.
I suspect the following example failed due to not synchronising
the event_generate call
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-07/msg01479.html

For multithreading Python Tk GUI applications the following rules
apply:
1. same thread calling Tk must do all subsequent GUI calls,
2. other threads may send events with send_event to the root Tk
instance,
3. with threading problems you might try to synchonise access to
event_generate(). Using event_generate() with one non-GUI thread seems
to be safe.

Aahz

non lue,
4 avr. 2009, 22:01:4804/04/2009
à
[posted & e-mailed]

In article <e92d6639-28e4-4b58...@k2g2000yql.googlegroups.com>,


<bal...@googlemail.com> wrote:
>
>Before starting I spent some effort to find
>a) relevant documentation,
>b) GUI Builders which might help me,
>c) answers to non-obvious questions.
>
>The process took some time and effort so I want to share my findings:

Adding this to wiki.python.org/moin/ would be very welcome! (You should
probably hunt around a bit to find the best spot.)
--
Aahz (aa...@pythoncraft.com) <*> http://www.pythoncraft.com/

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by
definition, not smart enough to debug it." --Brian W. Kernighan

aba...@gmail.com

non lue,
3 janv. 2015, 13:30:4803/01/2015
à
Hi,

I have had issues running Tix on python 2.7.6 and 3.4.2:

More details on the issue here.

http://stackoverflow.com/questions/27751923/tix-widgets-installation-issue

Has anyone had similar issues with Tix?

Thanks and Happy New Year.

Terry Reedy

non lue,
3 janv. 2015, 16:58:4603/01/2015
à pytho...@python.org
On 1/3/2015 1:30 PM, aba...@gmail.com wrote:
> Hi,
>
> I have had issues running Tix on python 2.7.6 and 3.4.2:
>
> More details on the issue here.
>
> http://stackoverflow.com/questions/27751923/tix-widgets-installation-issue
>
> Has anyone had similar issues with Tix?

The current doc is wrong in any case. I opened
http://bugs.python.org/issue23156

--
Terry Jan Reedy

Christian Gollwitzer

non lue,
4 janv. 2015, 03:23:2004/01/2015
à
Am 03.01.15 um 22:57 schrieb Terry Reedy:
Tix is a compiled extension, so this tix8.4.3.dll is needed as well as a
couple of .tcl file including pkgIndex.tcl, which makes the package
available to the Tcl interpreter. tix*.dll was never part of tk*.dll.

Note that Tix is LEGACY. There are much better options for its widgets
available that are based on ttk. Just to try, I compiled Tix under OSX
for my Tk8.6.3 and ran the widget demos.

Instead of

* Hierarchical Listbox use ttk::treeview, tablelist_tile or tkTreeCtrl,
with increasing order of capabilities and install complexity

* TList: I think tkTreeCtrl can do it, never have used this layout

* CheckList: tablelist can be used with an editable field

* Grid widget: use tkTable

* NoteBook, PanedWindow, ComboBox, LabelFrame -> ttk::notebook,
ttk::panedwindow, ttk::combobox, ttk::labelframe

* Balloon: tcllib::tooltip

Not to mention that the Tix widgets are extremely ugly, while the
widgets from ttk have a near-native look and feel.

Caveat emptor: I've never used Tix, so this is just my impression as an
experienced Tk programmer from running the widget demo

Christian

Terry Reedy

non lue,
4 janv. 2015, 15:46:3804/01/2015
à pytho...@python.org
On 1/4/2015 3:23 AM, Christian Gollwitzer wrote:

> Am 03.01.15 um 22:57 schrieb Terry Reedy:
>> The current doc is wrong in any case. I opened
>> http://bugs.python.org/issue23156

> Tix is a compiled extension, so this tix8.4.3.dll is needed as well as a
> couple of .tcl file including pkgIndex.tcl, which makes the package
> available to the Tcl interpreter. tix*.dll was never part of tk*.dll.
>
> Note that Tix is LEGACY. There are much better options for its widgets
> available that are based on ttk. Just to try, I compiled Tix under OSX
> for my Tk8.6.3 and ran the widget demos.
>
> Instead of
>
> * Hierarchical Listbox use ttk::treeview, tablelist_tile or tkTreeCtrl,
> with increasing order of capabilities and install complexity
>
> * TList: I think tkTreeCtrl can do it, never have used this layout
>
> * CheckList: tablelist can be used with an editable field
>
> * Grid widget: use tkTable
>
> * NoteBook, PanedWindow, ComboBox, LabelFrame -> ttk::notebook,
> ttk::panedwindow, ttk::combobox, ttk::labelframe
>
> * Balloon: tcllib::tooltip
>
> Not to mention that the Tix widgets are extremely ugly, while the
> widgets from ttk have a near-native look and feel.
>
> Caveat emptor: I've never used Tix, so this is just my impression as an
> experienced Tk programmer from running the widget demo

I copied parts of this response with additional comments in a new
tracker post.

--
Terry Jan Reedy

0 nouveau message