Dialogfenster implementieren

Fragen zu Tkinter.
Antworten
Gast

Hallo,
ich möchte bei meiner Applikation gerne ein Dialogfenster erstellen. Dazu habe ich mir eine Klasse gebaut die sich im wesentlichen an der Klasse Dialog in diesem Beispiel hier http://effbot.org/tkinterbook/tkinter-d ... indows.htm orientiert. In meiner Applikation soll dann ein Objekt dieser Klasse instanziiert werden:

Code: Alles auswählen

csDialog=OrthoPlanesDialog(root)
Beim Kompilieren erhalte ich jedoch die Fehlermeldung:

Code: Alles auswählen

csDialog=OrthoPlanesDialog(root)
TypeError: 'module' object is not callable
Liegt das daran, dass ich das falsche Argument übergebe, oder liegt der Fehler in der Art, wie meine Dialogklasse programmiert ist?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

OrthoPlanesDialog ist bei dir ein Modul, was steht denn in der Datei OrthoPlanesDialog.py drin?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Hier ist die Klasse OrthoPlanesDialog.py. Das Grundgerüst entspricht dem aus dem Beispiel von oben genannten Link, ich habe lediglich die methode body(self, master) meinen Vorstellungen angepasst.

Code: Alles auswählen

#!/usr/bin/python
 
from Tkinter import *
import os

class OrthoPlanesDialog(Toplevel):

    def __init__(self, parent, title = None):
	
        Toplevel.__init__(self, parent)
        self.transient(parent)

        if title:
            self.title(title)

        self.parent = parent

        self.result = None

        body = Frame(self)
        self.initial_focus = self.body(body)
        body.pack(padx=5, pady=5)

        self.buttonbox()

        self.grab_set()

        if not self.initial_focus:
            self.initial_focus = self

        self.protocol("WM_DELETE_WINDOW", self.cancel)

        self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
                                  parent.winfo_rooty()+50))

        self.initial_focus.focus_set()

        self.wait_window(self)

    #
    # construction hooks

    def SetTkmini(tkminiasp):
    	self.tkmini=tkminiasp
	self.axialBut.configure(command=self.tkmini.ToggleAxialPlane)
    def body(self, master):
        csLab = Label(master, text="Toggle Cross Section Planes", font=title)
	axialLab = Label(master, text="Axial Plane", font=normal)
	coronalLab = Label(master, text="Coronal Plane", font=normal)
	sagittalLab = Label(master, text="Sagittal Plane", font=normal)
	self.axStatus=IntVar()
	self.coStatus=IntVar()
	self.saStatus=IntVar()
	self.axStatus.set(1)
	self.saStatus.set(1)
	self.coStatus.set(1)
	self.axialBut = Checkbutton(master, text="On/Off", variable=self.axStatus,font=normal)
	"""self.coronalBut = Checkbutton(master, text="On/Off", variable=self.coStatus , command=self.ToggleCoronalPlane, font=normal)
	self.sagittalBut = Checkbutton(master, text="On/Off", variable=self.saStatus, command=self.ToggleSagittalPlane, font=normal)
	mainLab=Label(master, text="Switch Everything", font=normal)
	self.mainStatus=IntVar()
	self.mainStatus.set(1)
	mainBut=Checkbutton(master, text="On/Off",variable=self.mainStatus,command=self.ToggleAll, font=normal)
	"""
	csLab.grid(column=0,row=0, columnspan=2, sticky='w')
	axialLab.grid(column=0,row=1,sticky='e')
	coronalLab.grid(column=0,row=2,sticky='e')
	sagittalLab.grid(column=0,row=3,sticky='e')
	mainLab.grid(column=0,row=4,sticky='e')
	self.axialBut.grid(column=1,row=1)
	"""self.coronalBut.grid(column=1,row=2)
	self.sagittalBut.grid(column=1,row=3)
	mainBut.grid(column=1,row=4)
	return self.axialBut #initial focus
        """#pass

    def buttonbox(self):
        # add standard button box. override if you don't want the
        # standard buttons

        box = Frame(self)

        w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
        w.pack(side=LEFT, padx=5, pady=5)
        w = Button(box, text="Cancel", width=10, command=self.cancel)
        w.pack(side=LEFT, padx=5, pady=5)

        self.bind("<Return>", self.ok)
        self.bind("<Escape>", self.cancel)

        box.pack()

    #
    # standard button semantics

    def ok(self, event=None):

        if not self.validate():
            self.initial_focus.focus_set() # put focus back
            return

        self.withdraw()
        self.update_idletasks()

        self.apply()

        self.cancel()

    def cancel(self, event=None):

        # put focus back to the parent window
        self.parent.focus_set()
        self.destroy()

    #
    # command hooks

    def validate(self):

        return 1 # override

    def apply(self):

        pass # override
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Wie hast Du denn OrthoPlanesDialog.py in Dein Script eingebunden?

Code: Alles auswählen

# so?
import OrthoPlanesDialog
# oder so?
from OrthoPlanesDialog import OrthoPlanesDialog
# oder so?
from OrthoPlanesDialog import *
Im ersten Fall musst Du es nämlich so aufrufen:

Code: Alles auswählen

csDialog = OrthoPlanesDialog.OrthoPlanesDialog(root)
Gruß, mawe
Antworten