2016-08-12 9 views
0

質問を簡略化し、質問をより明確に伝えるためにこれに関する以前の質問を削除しました。その中に複数のクラスを持つプロジェクトがあります。ボタンをクリックすると、カレンダーを新しいウィンドウで表示したいと考えています。私は現在、this私の全体的なスクリプトの中にマイナーチェンジしたカレンダースクリプトを使用しています。私はこのようなカレンダースクリプトの最初の部分でトップレベルにフレームを変更:Tkinter、カレンダーをToplevelウィンドウのボタンをクリックして表示する

class Calendar(tk.Toplevel): 

    def __init__(self, parent, **kw): 

     Toplevel.__init__(self, parent, **kw) 

は今、これは私のスクリプトの残りの部分と一緒にトップレベルウィンドウでカレンダーを作成しないが、それは、すぐにプログラムがあるとして、それをしません開始しました。私はそれが後でユーザーによって呼び出されたときに表示するようにしたい。

例:

def show_Calendar(self): 
    '''shows calendar''' 
    toplevel = Toplevel() 
    toplevel.Calendar.place(x=0, y=0) 

ボタンがウィンドウを作成しないが、その中には何もありません。これを呼ぶだろう

class Application(tk.Tk): # tk.Tk creates main window 

    def __init__(self): 
     tk.Tk.__init__(self) 

     self.title("T") 
     self.geometry('550x320')#x,y 
     self.create_options() 
     self.calendar = Calendar(self) 

    def create_options(self): 
     self.widgets = tk.Frame(self) 
     tk.Button(self, 
       text = "...", command=self.show_Calendar 
       ).place(x=525, y=130) 

。このカレンダーをボタンをクリックしたときに表示されるウィンドウにのみ表示させるにはどうすればよいでしょうか?

答えて

1
self.calendar = Calendar(self) 

アプリケーションが作成されると同時に、それを作成するアプリケーションinit以内にこの行を置きます。これをあなたのshow_Calendarメソッドに移したいと思うでしょう。

def show_Calendar(self): 
    '''shows calendar''' 
    toplevel = Toplevel() 
    toplevel.Calendar.place(x=0, y=0) 

toplevel = Toplevel()ここでは意味がありません。ブランクToplevelを作成し、それをローカル変数にします。このToplevelではありません。はあなたのカレンダーに関連しています

Calendarスクリプトでは、CalendarクラスがToplevelから継承されているため、カレンダーを作成するときはいつでも、独自のToplevelにアタッチされます。

def show_Calendar(self): 
    '''shows calendar''' 
    self.calendar = Calendar(self) 

あなたがそれを削除する前に、私はあなたの前の質問を見ていた、とユーザの変更が集中したときにも、カレンダーを削除したい場合、あなたは、ここにEvents and Bindingsに、具体的<FocusOut>になります。

+0

'Calendar'インスタンスに' Toplevel'があるので 'place'を呼び出す理由はありません。実際、 'place 'を呼び出すと、' Toplevel'のインスタンスに 'place'関数がないので、エラーをスローします。 –

+0

私は参照してください。私はその行を削除しました。 – Hobbes

+0

@Hobbesありがとう!私は最後のカップルの間、ウェブを試してみる方法を見つけようとしています。助けを感謝します! – TheHoff

関連する問題