Seite 1 von 1

Tix Combobox?

Verfasst: Dienstag 14. November 2006, 20:51
von Ferox
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)

Verfasst: Dienstag 14. November 2006, 21:12
von rolgal_reloaded
Hallo Ferox,

was ist Tix ?

Wozu ist die globale Variable hfs?

LG

rolgal_reloaded

Re: Tix Combobox?

Verfasst: Dienstag 14. November 2006, 21:22
von Joghurt
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)

Verfasst: Dienstag 14. November 2006, 21:22
von Ferox
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

Verfasst: Dienstag 14. November 2006, 21:24
von Joghurt
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.

Re: Tix Combobox?

Verfasst: Dienstag 14. November 2006, 21:26
von Ferox
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

Verfasst: Dienstag 14. November 2006, 21:29
von Ferox
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'))

Verfasst: Dienstag 14. November 2006, 21:31
von schlangenbeschwörer
@ 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]

Verfasst: Dienstag 14. November 2006, 21:39
von Ferox
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

Verfasst: Mittwoch 15. November 2006, 14:14
von HWK
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