田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【tkinter】サブ画面を表示する方法【Python】

f:id:vigilantPotato:20210515005605p:plain
メインの画面とは別のサブ画面を生成する方法を示す。


【スポンサーリンク】


サブ画面を表示する方法

メイン画面とは別のサブ画面を生成するためには、Toplevelを使用する。

import tkinter

#メイン画面
root = tkinter.Tk()
root.geometry("400x100")
root.title("main window")

#サブ画面
sub_window = tkinter.Toplevel()
sub_window.title("sub window")
sub_window.geometry("400x100")

root.mainloop()

実行するとメイン画面と一緒にサブ画面が表示される。Toplevelで生成したサブ画面は、メイン画面が削除されると一緒に削除される。

f:id:vigilantPotato:20210717154923p:plain

[↑ 目次へ]


【スポンサーリンク】


サブ画面にプログレスバーを表示させる例

5秒タイマー起動中に、サブ画面にプログレスバーを表示して、処理中であることを表示させる例を示す。プログレスバーの使い方は、こちらを参照。

import time
import threading
import tkinter
from tkinter import ttk

class TimerButton(tkinter.Button):
    def __init__(self, root):
        super().__init__(
            root,
            text="start",
            width=15,
            command=self.start_timer,
        )
    
    def start_timer(self):
        #サブウィンドウ
        self.sub = tkinter.Toplevel()
        
        #プログレスバー
        self.p = ttk.Progressbar(self.sub, mode="indeterminate", )
        self.p.pack()
        self.p.start(3)

        #タイマー開始
        self.thread = threading.Thread(target=self.timer)
        self.thread.start()

    def timer(self):
        #タイマー
        i = 0
        while i < 5:
            time.sleep(1)
            i += 1

        self.p.stop()       #プログレスバー停止
        self.sub.destroy()  #サブウィンドウ削除


if __name__ == "__main__":
    root = tkinter.Tk()

    b= TimerButton(root)
    b.pack()

    root.mainloop()

メイン画面に表示されたボタンをクリックすると5秒タイマーが起動し、同時にプログレスバーを表示したサブ画面が出現する。5秒後にタイマーが切れるとサブ画面のみCloseする。

f:id:vigilantPotato:20210717154954p:plain
f:id:vigilantPotato:20210717155017p:plain

[↑ 目次へ]


【スポンサーリンク】