Python: 同時プログラミング (20)

序文

この記事では、実際の Python 同時プログラミング プロジェクト: win グラフィカル インターフェイス アプリケーション(パート 2、全 8 回の記事) について説明します。一連の記事では、プロジェクトをゼロから構築し、徐々にプロジェクトを改善し、最終的にプロジェクトを作成します。同時実行性の高いシーン アプリケーションに適しています。

この記事は Python 同時プログラミングの 20 回目の記事です 前回の記事のアドレスは以下のとおりです。

Python: 同時プログラミング (19)_ライオン キングのブログ - CSDN ブログ

次回記事のアドレスは以下の通りです。

Python: 同時プログラミング (21)_ライオン キングのブログ - CSDN ブログ

1. Tkinterのクイックスタート

公式ドキュメント: Tk グラフィカル ユーザー インターフェイス (GUI) — Python 3.11.4 ドキュメント

この章では、Tkinter インターフェイス要素の使用方法を簡単に学習します。簡単である理由は、後続の記事で使用するため、学習するためです。後で使用する概念の一部についても、必ずしも言及する必要はなく、また、一部の概念については言及しません。しかし、それは言わなければなりません。

 1. Tkinter アーキテクチャ

Tkinter は、比較的独立した 3 つのライブラリ TCL、TK、TTK で構成されています。Tcl はスクリプト言語、Tk はクロスプラットフォームのグラフィカル ユーザー インターフェイス ツールキット、TtK はテーマを備えた TK 拡張モジュールであるため、3 つは Tcl/Tk アーキテクチャと呼ばれます。Tkinter は Tcl/Tk に基づいており、Tcl/Tk が提供する基礎となる関数を使用してグラフィカル インターフェイスを作成および管理します。

2. Tkinter モジュール

Tkinter は、Python の標準的なグラフィカル ユーザー インターフェイス (GUI) ツールキットであり、ウィンドウ、ボタン、ラベル、テキスト ボックスなどのさまざまなインターフェイス要素を作成する機能を提供し、開発者がグラフィカル インターフェイス アプリケーションを簡単に作成できるようにします。以下は、Tkinter モジュールの基本的な知識のポイントです。

(1) Tkinterモジュールのインポート

import tkinter as tk

(2) メインウィンドウの作成

window = tk.Tk()

(3) ウィンドウタイトルを設定する

window.title("窗口标题")

(4) タグを追加する

label = tk.Label(window, text="标签文本")
label.pack()

(5) 追加ボタン

button = tk.Button(window, text="按钮文本")
button.pack()

(6) テキストボックスを追加する

entry = tk.Entry(window)
entry.pack()

(7) メニューバーを追加する

menubar = tk.Menu(window)
window.config(menu=menubar)

(8) メニュー項目の作成

file_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label="文件", menu=file_menu)

(9) バインディングイベントハンドラ関数

def button_click():
    # 处理按钮点击事件的代码

button = tk.Button(window, text="按钮文本", command=button_click)

(10) メインループを実行する

window.mainloop()

上記は Tkinter モジュールの基本的な使用法の一部ですが、必要に応じて Tkinter のさまざまな機能とコンポーネントをさらに学習し、探索して、要件を満たすグラフィカル インターフェイス アプリケーションを作成することができます。

3. Tkinter サプリメント

Tkinter を GUI 開発に使用する場合には、他にも知っておくべき重要な側面と機能がいくつかあります。Tkinter のピックアップポイントをいくつか紹介します。

(1) スタイルとテーマ (スタイルとテーマ): Tkinter はスタイルとテーマのサポートを提供し、さまざまなスタイルとテーマを設定することでアプリケーションの外観とスタイルをカスタマイズできます。ttk.Styleオブジェクトを使用してスタイルを定義および適用したり、事前定義されたテーマを使用して全体の外観を変更したりできます。

(2) ダイアログとメッセージ ボックス (ダイアログとメッセージ ボックス): Tkinter は、警告、エラー、情報などを表示するためのいくつかの組み込みダイアログ ボックスとメッセージ ボックスを提供します。モジュールを使用するとtkinter.messagebox、プロンプト ボックス、確認ボックス、入力ボックスなどのダイアログ ボックスを作成および表示できます。

(3) 描画とキャンバス: Tkinter を使用すると、キャンバス上で線、四角形、楕円、多角形などの描画操作を実行できます。コントロールを使用してキャンバスを作成し、さまざまなメソッドやプロパティを使用してキャンバス上に描画できますtkinter.Canvas

(4) メニューとツールバー: Tkinter は、アプリケーションのさまざまな機能とオプションを整理して表示するためのメニュー バーとツールバーの作成をサポートします。tkinter.Menuおよびtkinter.Menuコントロールを使用してメニューとサブメニューを作成し、tkinter.Toolbarコントロールを使用してツールバーを作成できます。

(5) キーボード ショートカット (キーボード ショートカット): Tkinter を使用すると、メニュー項目やその他のコントロールのキーボード ショートカットを定義して、より便利な操作方法を提供できます。特定のキーバインド ルールを使用すると、特定のキーを特定の機能に関連付けることができます。

(6) ウィンドウ管理 (Window Management): Tkinter を使用すると、複数のウィンドウを作成および管理したり、ウィンドウ間の切り替えや対話を行うことができます。tkinter.Toplevelコントロールを使用して追加のトップレベル ウィンドウを作成したり、 や などのメソッドを使用してlift()ウィンドウlower()の階層順序を調整したりできます。

(7) 国際化サポート (Internationalization Support): Tkinter は国際化 (i18n) とローカリゼーション (l10n) のサポートを提供し、多言語アプリケーションを作成できるようにします。モジュールと関連するローカリゼーション ファイルを使用するとgettext、アプリケーションのテキストとラベルをさまざまな言語に翻訳できます。

これらは Tkinter のハイライトの一部にすぎません。探索および適用できる機能は他にもたくさんあります。Tkinter を GUI 開発に使用するには、Tkinter が提供するさまざまなコントロール、メソッド、プロパティに精通し、独自のニーズに応じてカスタマイズして開発する必要があります。

4. Tk の重要な概念

Tkinter には、Tkinter をよりよく理解し使用するために知っておくべき重要な Tk 概念がいくつかあります。Tk の重要な概念をいくつか示します。

(1) ルート ウィンドウ (ルート ウィンドウ): Tkinter アプリケーションの最上位のウィンドウはルート ウィンドウと呼ばれます。これは、他のすべてのウィンドウおよびウィジェットの親ウィンドウです。tkinter.Tkオブジェクトを作成してルート ウィンドウを作成します。

(2) ウィジェット: Tkinter は、GUI インターフェイスを構築するためのさまざまなウィジェットを提供します。ウィジェットには、ボタン、ラベル、テキスト ボックス、チェック ボックス、スクロール バーなどが含まれます。対応する Tkinter クラスを使用してウィジェットを作成および構成できます。

(3) ジオメトリ管理: Tkinter は、ウィジェットのレイアウトと位置を管理するためのいくつかの方法を提供します。最も一般的に使用される方法は、パック マネージャー、グリッド マネージャー、およびプレイス マネージャーです。

(4) イベント駆動型 (Event-Driven): Tkinter はイベント駆動型のライブラリであり、ユーザーの操作やイベントに応答することを意味します。さまざまなイベント (クリック、マウスの動き、キーボード入力など) をウィジェットにバインドし、対応するイベント ハンドラーを定義できます。

(5) 変数 (Variables): Tkinter は、ウィジェットとアプリケーション間でデータを共有するための特別な変数クラスをいくつか提供します。最も一般的に使用されるのはtkinter.StringVar、、、tkinter.IntVarおよびですtkinter.BooleanVar

(6)コールバック関数(Callback Function):コールバック関数は、特定のイベントが発生したときに呼び出される関数である。Tkinter では、関数をパラメータとしてウィジェットの関連メソッドに渡して、イベント処理と関数拡張を実装できます。

(7) グラフィック コンテキスト: Tkinter はグラフィック コンテキストを使用してグラフィックとテキストを描画します。Canvas や Label などのウィジェットを使用して、グラフィックス コンテキストにコンテンツを表示できます。

これらは Tkinter の重要な概念であり、これらを理解すると、Tkinter を使用して GUI アプリケーションをより適切に構築するのに役立ちます。これらの概念を理解し、練習を続けることで、機能豊富でインタラクティブな GUI インターフェイスを作成できるようになります。

5. Tkinter スレッドモデル

Tkinter はシングルスレッド モデルを採用しています。つまり、Tkinter 関連のすべての操作はメイン スレッドで実行される必要があります。これは、Tkinter が Tk ライブラリへの Python インターフェイスに基づいており、それ自体がスレッドセーフではないためです。したがって、Tkinter アプリケーションのメイン イベント ループ (メイン ループ) と GUI 更新操作の両方をメイン スレッドで実行する必要があります。

Tkinter では、メインスレッドは GUI イベントの処理と GUI インターフェイスの更新を担当します。ユーザーがインターフェイスを操作したり、イベントをトリガーしたり、GUI 更新を実行したりすると、これらの操作がイベント キューに追加され、メイン スレッドがキュー内のイベントを順番に処理してインターフェイスを更新します。したがって、Tkinter 関連の操作を他のスレッドで実行すると、スレッドの安全性の問題や予期しない動作が発生する可能性があります。

Tkinter アプリケーションで時間のかかるタスクや長い計算を実行する必要がある場合は、モジュールを使用してthreading新しいスレッドを作成し、新しいスレッドでこれらのタスクを実行できます。次に、Tkinter が提供するスレッド間通信メカニズムを使用して、結果がメインスレッドに返され、GUI インターフェイスが更新されます。一般的に使用されるスレッド間通信メカニズムにはtkinter.Variable、 、 、tkinter.afterおよび が含まれますtkinter.Event

スレッド間で Tkinter ウィジェットにアクセスする場合、スレッドの競合やデータ競合を避けるために、適切なスレッド同期メカニズムを使用する必要があることに注意してください。threading.Lockまたはなどのスレッド同期オブジェクトを使用してthreading.RLock保護できます。

要約すると、Tkinter はシングルスレッド モデルを採用しており、Tkinter 関連のすべての操作はメイン スレッドで実行する必要があり、時間のかかるタスクは他のスレッドで実行でき、メイン スレッドと対話して GUI インターフェイスを更新できます。スレッド間通信メカニズム。

6. ハローワールドプログラム

from tkinter import *
from tkinter import ttk
root = Tk()
frm = ttk.Frame(root, padding=10)
frm.grid()
ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
root.mainloop()

おすすめ

転載: blog.csdn.net/weixin_43431593/article/details/131354761