見出し画像

PySimpleGUIの背後のTkinter

(Python学習初心者の試行錯誤・備忘録です)
PySimpleGUIを使用しながら、背後にあるTkinterの機能にアクセスしたい場合どうするの?と思って、Copilotに聞きました。

import PySimpleGUI as sg

# PySimpleGUIのウィンドウを作成
layout = [[sg.Text('こんにちは、世界!')]]
window = sg.Window('ウィンドウのタイトル', layout, finalize=True)

# Tkinterのルートウィンドウにアクセス
tk_root = window.TKroot

# ここでtk_rootを使用してTkinterの機能を利用できます
# 例えば、ウィンドウのタイトルを変更する
tk_root.title('新しいタイトル')

# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

(詳細情報として紹介されたリンク)
Widget Access - PySimpleGUI Documentation
PySimpleGUI - The Tkinter Port - PySimpleGUI Documentation
Binding Tkinter "events" - PySimpleGUI Documentation
How to use a tkinter module in a sg window ? · Issue #1319 · PySimpleGUI/PySimpleGUI · GitHub

念のため著作権についても確認

検証

ウィンドウタイトル変更

Copilotに教えられたとおりにやっても動かないこともあるので、実際に試す必要があります。最初のサンプルコードを実行すると……

コラー!ウインドウのタイトルが変わったかどうか見たいのに潰れて見えないじゃん!

 横に広げるため「こんにちは、世界!」を3回ばかり唱えておきます。

tk_root.title('新しいタイトル') をコメントアウトすれば

意図した動作をしているようです。

フォント変更

ソースにフォント変更のコードを追加して


import PySimpleGUI as sg

# PySimpleGUIのウィンドウを作成
layout = [[sg.Text('こんにちは、世界!こんにちは、世界!こんにちは、世界!',
                   key='-TEXT-')]]
window = sg.Window('ウィンドウのタイトル', layout, finalize=True)

# Tkinterのルートウィンドウにアクセス
tk_root = window.TKroot

# ここでtk_rootを使用してTkinterの機能を利用できます
# 例えば、ウィンドウのタイトルを変更する
tk_root.title('新しいタイトル')

# テキストエレメントのフォントを変更
text_element = window['-TEXT-']
text_element.Widget.config(font=('Helvetica', 18))

# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

フォント変更もうまく行きました。

この記事が気に入ったらサポートをしてみませんか?