質問するログイン新規登録
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

291閲覧

起動中画面を表示して、初期設定を行った後、起動中画面を消し、プログラム本体に進みたい。

Ta2S

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2023/10/08 13:39

0

0

実現したいこと

起動中画面を表示して、初期設定を行った後、起動中画面を消し、プログラム本体に進みたい。
初期設定に20秒~30秒かかるので、その間、無反応状態にならないよう、
「検査ソフト起動中」の画面を表示したままにしたい。

前提

Pythonを独学で学習し始めて、約3か月の初心者です。
windows11+Python+Tkinter
簡単なPySimpleGUIでプログラム開発していたが、PySimpleGUIで越えられない問題が出たので、
Tkinterで同様の表現ができないか試行錯誤しています。

発生している問題・エラーメッセージ

エラーメッセージはありません。 「検査ソフト起動中」の画面が表示されないまま、初期設定に進む。

該当のソースコード

import tkinter as tk import cv2 root = tk.Tk() root.title('Window Title') root.overrideredirect(True) root.attributes('-topmost', True) text1 = tk.Label(root, text=' ') text2 = tk.Label(root, text='検査ソフト起動中', font=('Helvetica', 20), justify='center') text3 = tk.Label(root, text=' ') text1.pack() text2.pack() text3.pack() root.update_idletasks() width = root.winfo_width() height = root.winfo_height() x = (root.winfo_screenwidth() // 2) - (width // 2) y = (root.winfo_screenheight() // 2) - (height // 2) root.geometry('{}x{}+{}+{}'.format(width, height, x, y)) cap = cv2.VideoCapture(0) # 初期設定例 ret, frame = cap.read() # 初期設定例 cap.release() cv2.destroyAllWindows() root.destroy()

試したこと

初期設定の前に
root.after(5000, root.destroy)
root.mainloop()
などといれると、「検査ソフト起動中」の画面が表示されるが、その画面が消えてから初期設定が始まる。

Webで検索しても、monicaで質問しても、解決策を見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

環境:
i5-7400 16GBメモリ 256GBSSD QuadroP600Video Windows11
VSCode 1.81.1 Python 3.11.4 Opencv-python 4.7.0.72

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2023/10/09 09:04

質問にあるコードでウィンドゥは表示されるはずですが、表示場所は左上になると思います。 意図どおりに真ん中に表示したいのであれば、「root.update_idletasks()」をgeometry変更後にも実行する必要があります。 どのような環境で実行していますか?
Ta2S

2023/10/09 12:42

回答ありがとうございます。 画面上のどこにもウィンドゥは表示されませんでした。 geometryの後に「root.update_idletasks()」を入れても表示されませんでした。 今自己解決しました。 教えていただいたroot.update_idletasks()とは何か、調べていると root.update()で画面を即時更新できる、との情報に行きつき、試してみると、表示できました。 参考になる情報、ありがとうございました。
Ta2S

2023/10/09 20:33

TakaiY様 まだこのシステムになれておらず、ベストアンサーにする仕方がわからず、自己解決にしてしまってすみません。 もう一つのPySimpleGUIの質問の方も、このいただいた回答から、画面の更新を検索し、解決に進めそうです。 ありがとうございました。
TakaiY

2023/10/10 01:31

自己解決にしていただいたの問題ありませんよ。 解決してよかったです。 多くのGUIのプログラムはイベント駆動型という、ちょっと特殊な形式で動いています。1つのプロセス(=1つのことしかできない)で、イベント(入力など)の処理と画面の更新をするのが目的です。 「イベント駆動型」「イベントドリブン」などのキーワードで検索するといろいろ記事がでてきますので、読んでみるといいと思います。
guest

回答1

0

自己解決

今自己解決しました。
教えていただいたroot.update_idletasks()とは何か、調べていると
root.update()で画面を即時更新できる、との情報に行きつき、試してみると、表示できました。

投稿2023/10/09 12:45

Ta2S

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問