3

GUI とさまざまな機能を備えた小さなアプリケーションを作成しています。私がフォローしている現在のレイアウトでは、次のような「ようこそ」画面があります。

1) ユーザーがいくつかのデータを入力する必要があり、

2) ユーザーが目的の機能を起動できるようにします。

ただ、「ようこそ」画面は、操作モードを選択した時点で目的を果たしているので、破棄するのが正しいと思います。次に、プログラムは、選択した機能の「メイン」ウィンドウに入る必要があります (トップレベルのウィジェット、ダイアログなどを生成できます)。ユーザーがやりたいことをやった後、プログラムが最初の「ようこそ」画面に戻ることができれば、それは素晴らしいボーナスです。

私が考えているのは、「ようこそ」ウィンドウとすべての「メイン」ウィンドウを Tkinter.Tk() インスタンスにすることです。ただし、Tkinter では、同時に実行されていなくても、複数の Tk() インスタンスを使用することは悪い考えであると聞いたことがあります。

私の質問は次のとおりです。このアプローチは正しいですか、それともプログラムで複数の Tk() インスタンスを使用しないようにする必要がありますか? もしそうなら、それを行う正しい方法はどれですか?

私は初心者のプログラマーであり、単に "hello world" と言う以上のことを行うはずの GUI を扱うのはこれが初めてであることを考慮してください。

御時間ありがとうございます。

4

1 に答える 1

4

一度に 1 つのウィンドウだけを表示したいので、さまざまな「スクリーン」を として定義しtk.Frame、メソッドを使用しliftて適切なフレームを表示できます。

import Tkinter as tk
class Page(tk.Frame):
    def __init__(self, master, text, height, width, *args, **kwargs):
        tk.Frame.__init__(self, *args, borderwidth=20, **kwargs)
        self.height = height
        self.width = width
        button = tk.Button(self, text=text, font=('Comic Sans MS', 20),
                           command=lambda: self.callback())
        button.pack(side="top", fill="both", expand=True)
    def onlift(self):
        root.geometry('{}x{}'.format(self.width, self.height))
        self.lift()

class App(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        p1 = Page(self, 'This is page 1', height=200, width=300)
        p2 = Page(self, 'Next page is 2', height=400, width=300)
        p3 = Page(self, 'We love number 3', height=400, width=600)
        p1.callback = p2.onlift
        p2.callback = p3.onlift
        p3.callback = p1.onlift

        p1.place(x=0, y=0, relwidth=1, relheight=1)
        p2.place(x=0, y=0, relwidth=1, relheight=1)
        p3.place(x=0, y=0, relwidth=1, relheight=1)

        p1.onlift()

root = tk.Tk()
app = App(root)
root.mainloop()

したがって、あなたの場合、 の他のサブクラスを定義tk.Frameし、それらを の代わりに使用できますPage

于 2013-07-01T20:23:54.053 に答える