Seite 1 von 1

Tix und Tkinter mit "import as..."

Verfasst: Samstag 18. April 2009, 19:22
von fatrat
Hallo,

weiß jemand, warum das hier funktioniert:

Code: Alles auswählen

from Tkinter import *
from Tix import *

fenster = Tk()
c = ComboBox(fenster)
c.pack()
fenster.mainloop()
das aber nicht:

Code: Alles auswählen

import Tkinter as tk
import Tix as tix

fenster = tk.Tk()
c = tix.ComboBox(fenster)
c.pack()
fenster.mainloop()

Schönes Wochenende noch!

fatrat

Verfasst: Samstag 18. April 2009, 20:00
von problembär
Wahrscheinlich deswegen:

Code: Alles auswählen

import Tkinter 
import Tix

fenster = Tix.Tk()
c = Tix.ComboBox(fenster)
c.pack()
fenster.mainloop()
Ich sag ja immer wieder, ich bin kein Freund von "as"-Importen, auch nicht bei Tkinter.

Gruß

Verfasst: Samstag 18. April 2009, 20:04
von derdon
Da ist aber nicht "das böse as" dran schuld, dass der Code beim TE nicht funktionierte.

Verfasst: Samstag 18. April 2009, 20:09
von BlackJack
Sondern das böse Sternchen. :-)

Verfasst: Samstag 18. April 2009, 20:12
von numerix
problembär hat geschrieben:Ich sag ja immer wieder, ich bin kein Freund von "as"-Importen, auch nicht bei Tkinter.
Hä? Das hat doch mit dem "as" nichts zu tun.
Es zeigt eher, dass man die *-Importe lassen sollte.
Du kannst ja mal bei deinem *-Import die beiden import-Zeilen in der Reihenfolge vertauschen ... :wink:

Die Erklärung ist einfach:
Wenn du mit Tix arbeitest, brauchst du die Tk()-Instanz aus dem Tix Modul, nicht die aus dem Tkinter-Modul.
Du kannst die as-importe also ruhig lassen, musst dann eben nur tix.Tk() schreiben.

Tkinter brauchst du für diesen Code übrigens gar nicht.

Verfasst: Samstag 18. April 2009, 20:20
von wuf
Hallo zusammen

Wie es numerix angedeutet hat funktioniert es auch so:

Code: Alles auswählen

from Tix import *
fenster = Tk()
c = ComboBox(fenster)
c.pack()
fenster.mainloop()

Code: Alles auswählen

import Tix as tix
fenster = tix.Tk()
c = tix.ComboBox(fenster)
c.pack()
fenster.mainloop()
Gruss wuf :wink:

Verfasst: Samstag 18. April 2009, 22:08
von wuf
.....Hier noch Tix und Tkinter als Team :lol: :

Code: Alles auswählen

import Tkinter as tk
import Tix as tix

fenster_tix = tix.Tk()
fenster_tk = tk.Tk()
fenster_tk.wm_geometry('100x100')

c = tix.ComboBox(fenster_tix)
c.pack()

canvas = tk.Canvas(fenster_tk, width=50, height=50, bg='Steelblue')
canvas.pack()

fenster_tk.mainloop()
fenster_tix.mainloop()
ATTENTION: For experimental purpose only !!!
(KuddelMuddel-Ware)

Gruss wuf :wink:

Verfasst: Samstag 18. April 2009, 22:23
von wuf
.....und hier noch ein Tkinter-Paar:

Code: Alles auswählen

import Tkinter as tk

fenster_tk1 = tk.Tk()
fenster_tk1.wm_geometry('100x100')
fenster_tk1.title('Tk-1')

fenster_tk2 = tk.Tk()
fenster_tk2.wm_geometry('100x100')
fenster_tk2.title('Tk-2')

canvas = tk.Canvas(fenster_tk1, width=50, height=50, bg='darkgreen')
canvas.pack()

canvas = tk.Canvas(fenster_tk2, width=50, height=50, bg='Steelblue')
canvas.pack()

fenster_tk1.mainloop()
fenster_tk2.mainloop()
ATTENTION: For experimental purpose only !!!
(KuddelMuddel-Ware)

Gruss wuf :wink:

Verfasst: Sonntag 19. April 2009, 16:44
von yipyip
@wuf:
2 Mainloops? :shock:
Die zweite kommt doch gar nicht zum Zuge...
oder anders gefragt:
Wieso klappt die folgende Erweiterung Deines
Codes dann auch mit einer Mainloop?

Code: Alles auswählen

import Tkinter as tk

fenster_tk1 = tk.Tk()
fenster_tk1.wm_geometry('100x100')
fenster_tk1.title('Tk-1')

fenster_tk2 = tk.Tk()
fenster_tk2.wm_geometry('100x100')
fenster_tk2.title('Tk-2')

canvas1 = tk.Canvas(fenster_tk1, width=50, height=50, bg='darkgreen')
canvas1.pack()

canvas2 = tk.Canvas(fenster_tk2, width=50, height=50, bg='Steelblue')
canvas2.pack()

def check(ev, i):

  print i, ev.keysym


fenster_tk1.bind('<KeyPress>', lambda ev: check(ev, 1))
fenster_tk2.bind('<KeyPress>', lambda ev: check(ev, 2))

print 'vor mainloop 1'
fenster_tk1.mainloop()
print 'vor mainloop 2'
#fenster_tk2.mainloop() 
print 'nach mainloop 2'
(Habe doch schon mal gesagt, so etwas gibt nur Kuddelmuddel!)

@fatrat:
Bitte nicht zu Hause nachmachen...

:wink:
yipyip

Verfasst: Sonntag 19. April 2009, 17:40
von wuf
Hallo yipyip

Danke fürs austesten. Das mit den .mainloop()'s hab ich gar nicht kontrolliert. Die Key-Events der beiden Fenster-Objekte scheinen aber trozt nur einer mainloop richtig gehändelt zu werden.

Da wäre noch ein weiterer Fall zu untersuchen:
http://www.python-forum.de/post-132464.html#132464

Bei diesem wird das Haupfenster auch sichtbar ohne mainloop()

Gruss wuf :wink: