Tix Combobox?

Fragen zu Tkinter.
Antworten
Ferox
User
Beiträge: 48
Registriert: Dienstag 14. März 2006, 16:34

Ursprünglich wollte ich die Combobox(Listbox) mit Tkinter machen, aber mit Tix gehts schneller(wenn es denn geht);
Ich hab nämlich ein Problem:
Folgender Code macht eine Combobox und gibt nachfolgende Fehlermeldung aus;
erst der Code:

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *
from Tix import *
def Test():
    hf=Tk()
    hauptrahmen=Frame(hf)
    hauptrahmen.pack()
    hf.title("Test")
    a = ComboBox(hf, label="Test").pack(anchor=W)
    a.insert(END, "Test1")
    a.insert(END, "Test2")

Test()
Und dann der Fehler:
Traceback (most recent call last):
File "D:/Programmiert/Python/CDArchivBeta3/test.py", line 14, in ?
Test()
File "D:/Programmiert/Python/CDArchivBeta3/test.py", line 11, in Test
a.insert(END, "Test1")
AttributeError: 'NoneType' object has no attribute 'insert'
Und jetzt die Frage: Wie fügt man Items zu der Auswahlliste hinzu, wenn nicht so? (Ich hab bei google gesucht und in den Codes die da angegeben waren stand drin dass das so geht)
Zuletzt geändert von Ferox am Dienstag 14. November 2006, 21:22, insgesamt 1-mal geändert.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo Ferox,

was ist Tix ?

Wozu ist die globale Variable hfs?

LG

rolgal_reloaded
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Ferox hat geschrieben:

Code: Alles auswählen

    a = ComboBox(hf, label="Test").pack(anchor=W)
Ich würde mal vermuten, dass "pack" None zurückliefert. Vielleicht geht es so:

Code: Alles auswählen

combo_box = ComboBox(hf, label="Test")
combo_box.insert(END, "Test1")
combo_box.insert(END, "Test2")
combo_box.pack(anchor=W)
Zuletzt geändert von Joghurt am Dienstag 14. November 2006, 21:22, insgesamt 1-mal geändert.
Ferox
User
Beiträge: 48
Registriert: Dienstag 14. März 2006, 16:34

Oh, jetzt seh ich das erst; (Ich dachte Tix wäre in Python integriert) :oops:
Also:
Tix stellt eine Reihe von Funktionen bereit, indem es Tkinter nutzt.
Tix steht für Tk Interface eXtension (sagt eigentlich schon alles) =)

So und die globale Variable hfs rührt daher das diese definition aus einem komplexeren Programm herührt.
Zur behebung des Problems hab ich halt die Definition vereinfacht, isoliert und getestet.
(-->also hfs einfach ignorieren ;-) )

Mfg
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Ferox hat geschrieben:So und die globale Variable hfs rührt daher das diese definition aus einem komplexeren Programm herührt.
"global" und "komplexes Programm" passen nicht zusammen.

Wenn das Program länger als ein paar Zeilen ist, nimm lieber Klassen. Mit global wirst du früher oder später auf die Nase fallen (insbesondere bei GUIs, wo die Ausführ-Reihenfolge nicht immer gleich ist), deshalb besser gar nicht erst angewöhnen.

Sonst endet das noch in einem Programm, wo man die Buttons nur in ganz bestimmter Reihenfolge drücken kann, damit das passiert, was man erwartet.
Zuletzt geändert von Joghurt am Dienstag 14. November 2006, 21:32, insgesamt 1-mal geändert.
Ferox
User
Beiträge: 48
Registriert: Dienstag 14. März 2006, 16:34

Joghurt hat geschrieben:
Ferox hat geschrieben:

Code: Alles auswählen

    a = ComboBox(hf, label="Test").pack(anchor=W)
Ich würde mal vermuten, dass "pack" None zurückliefert. Vielleicht geht es so:

Code: Alles auswählen

combo_box = ComboBox(hf, label="Test")
combo_box.insert(END, "Test1")
combo_box.insert(END, "Test2")
combo_box.pack(anchor=W)
Perfekt :mrgreen:
Thxal
Ferox
User
Beiträge: 48
Registriert: Dienstag 14. März 2006, 16:34

Joghurt hat geschrieben:
Ferox hat geschrieben:So und die globale Variable hfs rührt daher das diese definition aus einem komplexeren Programm herührt.
"global" und "komplexes Programm" passen nicht zusammen.

Wenn das Program länger als ein paar Zeilen ist, nimm lieber Klassen. Mit global wirst du früher oder später auf die Nase fallen, deshalb besser gar nicht erst angewöhnen.
Danke für den Tipp, werd's versuchen(hab mir bis jetzt leider nur Definitionen angewöhnt; damit bekomm ich aber bei Tkinter ein paar Probleme beim Weitergeben von Argumenten nach "herkömmlicher" Weise(Programm(String1='Bla'))
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

@ rolgal_reloaded: http://www.python-forum.de/topic-1448.h ... 3c09f76003
[Desswegen gehörts doch eigentlich ins Tkinterforum, oder]
@ ferox:

Code: Alles auswählen

IDLE 1.1.3      
>>> from Tix import *
>>> help(ComboBox)
[color=darkblue]Help on class ComboBox in module Tix:

class ComboBox(TixWidget)
 |  ComboBox - an Entry field with a dropdown menu. The user can select a
[...]
 |  
 |  add_history(self, str)
 |  
 |  append_history(self, str)
 |  
 |  insert(self, index, str)
 |  ...[/color]
Ferox
User
Beiträge: 48
Registriert: Dienstag 14. März 2006, 16:34

schlangenbeschwörer hat geschrieben:[Desswegen gehörts doch eigentlich ins Tkinterforum, oder]
Hast recht^^
schlangenbeschwörer hat geschrieben: @ ferox:

Code: Alles auswählen

IDLE 1.1.3      
>>> from Tix import *
>>> help(ComboBox)
[color=darkblue]Help on class ComboBox in module Tix:

class ComboBox(TixWidget)
 |  ComboBox - an Entry field with a dropdown menu. The user can select a
[...]
 |  
 |  add_history(self, str)
 |  
 |  append_history(self, str)
 |  
 |  insert(self, index, str)
 |  ...[/color]
add und append hatte ich auch ausprobiert, das Problem war dass combobox.pack(anchor=W) zu früh kam
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Nein! .pack() war nicht zu früh.

Code: Alles auswählen

a = ComboBox(hf, label="Test").pack(anchor=W)
a bekommt hier nicht den Rückgabewert von ComboBox(), d.h. das Widget-Object zugewiesen, sondern den Rückgabewert von .pack(), also irgendetwas. Folgendes müßte durchaus auch funktionieren:

Code: Alles auswählen

combo_box = ComboBox(hf, label="Test")
combo_box.pack(anchor=W) # <===
combo_box.insert(END, "Test1")
combo_box.insert(END, "Test2")
MfG
HWK
Antworten