Python, tkinterを用いたスプラッシュ画面の作成

目的

tkinterを用いてスプラッシュ画面を作成します。

そもそもスプラッシュ画面とは、ソフトウェアを起動した際に表示される画面のことです。

今回は起動に時間のかかるプログラム(他機器との接続を行う等)の開始を待っている間、画像を表示することを目的としています。

サンプルコード1

今回は起動時に幅1280、高さ800のsplash.pngという画像を表示するようにしています。

流れとしては起動時にsplash.pngをタイトルバーなしの状態で表示し、5000ms後にmain関数に移るといった内容になっています。

from tkinter import *

splash = Tk()
splash.overrideredirect(1) #スプラッシュ画面のタイトルバー非表示

photo = PhotoImage(file="splash.png") #表示させたい画像ファイル指定
canvas = Canvas(bg="black", width=1280, height=800) #画像のサイズに合わせて幅と高さ調整
canvas.place(x=0, y=0)
canvas.create_image(0, 0, image=photo, anchor=NW)

def main():
  splash.destroy() #スプラッシュ画面の破棄
  root = Tk()
  root.geometry("400x400")

splash.after(5000,main)

mainloop()

サンプルコード2

上記のサンプルコードでは、スプラッシュ画面がモニターの中央ではないところに表示されてしまい少々不格好です。そこでスプラッシュ画面をモニター中央に表示するようにしたのが下記のsplash2.pyです。

モニターの横幅、縦幅を取得しその値を用いてモニター中央に画面を表示するという形になっています。

tkinterのサイズ、位置を調整するgeometryは引数がgeometry(AxB+C+D)の形になっており、この場合は縦幅Apx、横幅Bpxの画面が縦Cpx、横Dpxの位置に表示されます。

from tkinter import *

splash = Tk()
splash.overrideredirect(1) #スプラッシュ画面のタイトルバー非表示
ww=splash_root.winfo_screenwidth() #モニターの横幅取得
wh=splash_root.winfo_screenheight() #モニターの縦幅取得
splash_root.geometry("1280x800+"+str((ww-1280)//2)+"+"+str((wh-800)//2)) #モニターの中央に画面を表示

photo = PhotoImage(file="splash.png") #表示させたい画像ファイル指定
canvas = Canvas(bg="black", width=1280, height=800) #画像のサイズに合わせて幅と高さ調整
canvas.place(x=0, y=0)
canvas.create_image(0, 0, image=photo, anchor=NW)

def main():
  splash.destroy() #スプラッシュ画面の破棄
  root = Tk()
  root.geometry("400x400")

splash.after(5000,main)

mainloop()

コメント

タイトルとURLをコピーしました