Tix und Tkinter mit "import as..."

Fragen zu Tkinter.
Antworten
fatrat
User
Beiträge: 8
Registriert: Mittwoch 3. Dezember 2008, 11:03

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
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ß
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Da ist aber nicht "das böse as" dran schuld, dass der Code beim TE nicht funktionierte.
BlackJack

Sondern das böse Sternchen. :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

.....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:
Zuletzt geändert von wuf am Sonntag 19. April 2009, 17:45, insgesamt 1-mal geändert.
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

.....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:
Zuletzt geändert von wuf am Sonntag 19. April 2009, 17:46, insgesamt 1-mal geändert.
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

@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
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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:
Take it easy Mates!
Antworten