-
Notifications
You must be signed in to change notification settings - Fork 9
[Feature]: pystrayからTkEasyGUIのvaluesの中身を簡単に表示できるようにしてほしい。 #111
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Overview
TkEasyGUIとpystrayを組み合わせたときに
pystrayからTkEasyGUIのvaluesの中身を簡単に表示できるようにしてほしい。
Background
TkEasyGUI上でのスライダーの値等(values)をpystrayから読み取って表示したいが、
PySimpleGUIの時と違いdeepcopyを使わないとpystray側ではvaluesが空になる。
Proposal
TkEasyGUIで設定し、pystrayで設定を表示するようなプログラムを考えていたのですが、
TkEasyGUIではeventごとにvaluesをdeepcopyしないとうまくできませんでした。
TkEasyGUIのアップデートでPySimpleGUIのようにdeepcopyを使わずとも
pystrayからvaluesを共有できるようにすることは可能でしょうか。
PySimpleGUIを使用した場合
PySimpleGUI上でもpystray上でもvaluesの中身が共有されるようで普通に表示される。
このコードをそのままTkEasyGUIに置き換えるとpystray上ではvaluesの中身は空で表示される。
import PySimpleGUI as sg
import threading
from pystray import Icon, Menu, MenuItem
from PIL import Image
sl1_default = 5
sl2_default = 15
layout = [[sg.Text(str(sl1_default), key="-txt1-", size=(2,None)),
sg.Slider(key="-sl1-", range=(1,10), default_value=sl1_default,
resolution=1, orientation="h",
disable_number_display=True, enable_events=True)],
[sg.Text(str(sl2_default), key="-txt2-", size=(2,None)),
sg.Slider(key="-sl2-", range=(11,20), default_value=sl2_default,
resolution=1, orientation="h",
disable_number_display=True, enable_events=True)],
[sg.Text("values", key="-txt3-")],
[sg.Button("GUIにvalues表示", key="-btn1-"),
sg.Button("閉じる", key="-btn2-")]]
window = sg.Window(title="テストプログラム", layout=layout, font=(None,14))
def system_tray_values(): #システムトレイ(通知領域)にvaluesの中身を表示する関数
global system_tray
global values
system_tray.remove_notification()
system_tray.notify(str(values.items()))
def system_tray_start(): #システムトレイを作成する関数
global system_tray
global system_tray_count
tray_icon = Image.open("icon.ico") #アイコンファイルの用意が必要
tray_menu = Menu(MenuItem("トレーにvalues表示", system_tray_values,
default=True))
system_tray = Icon(name="テストプログラム", icon=tray_icon,
title="テストプログラム", menu=tray_menu)
system_tray.run()
threading.Thread(target=system_tray_start, daemon = True).start() #システムトレイの表示
while True:
event, values = window.read(1)
if event == "-sl1-":
window["-txt1-"].update(int(values["-sl1-"]))
if event == "-sl2-":
window["-txt2-"].update(int(values["-sl2-"]))
if event == "-btn1-":
window["-txt3-"].update(values.items())
if event == "-btn2-":
break
if event == sg.WIN_CLOSED:
break
system_tray.stop()
window.close()上記と同じ動きをTkEasyGUIで再現しようとした場合
eventごとにdeepcopyをする必要がある?
import TkEasyGUI as eg
import threading
from pystray import Icon, Menu, MenuItem
from PIL import Image
import copy
sl1_default = 5
sl2_default = 15
values_deep_copy_on = 1
values_deep_copy = {}
layout = [[eg.Text(str(sl1_default), key="-txt1-", size=(2,None)),
eg.Slider(key="-sl1-", range=(1,10), default_value=sl1_default,
resolution=1, orientation="h",
disable_number_display=True, enable_events=True)],
[eg.Text(str(sl2_default), key="-txt2-", size=(2,None)),
eg.Slider(key="-sl2-", range=(11,20), default_value=sl2_default,
resolution=1, orientation="h",
disable_number_display=True, enable_events=True)],
[eg.Text("values", key="-txt3-")],
[eg.Button("GUIにvalues表示", key="-btn1-"),
eg.Button("閉じる", key="-btn2-")]]
window = eg.Window(title="テストプログラム", layout=layout, font=(None,14))
def system_tray_values(): #システムトレイ(通知領域)にvaluesの中身を表示する関数
global system_tray
global values
global values_deep_copy
values = copy.deepcopy(values_deep_copy)
system_tray.remove_notification()
system_tray.notify(str(values.items()))
def system_tray_start(): #システムトレイを作成する関数
global system_tray
global system_tray_count
tray_icon = Image.open("icon.ico") #アイコンファイルの用意が必要
tray_menu = Menu(MenuItem("トレーにvalues表示", system_tray_values,
default=True))
system_tray = Icon(name="テストプログラム", icon=tray_icon,
title="テストプログラム", menu=tray_menu)
system_tray.run()
threading.Thread(target=system_tray_start, daemon = True).start() #システムトレイの表示
while True:
event, values = window.read(1)
if values_deep_copy_on == 1: #初回起動時にdeepcopyをする
values["-sl1-"] = sl1_default
values["-sl2-"] = sl2_default
values_deep_copy = copy.deepcopy(values)
values_deep_copy_on = 0
if event == "-sl1-":
window["-txt1-"].update(int(values["-sl1-"]))
values_deep_copy = copy.deepcopy(values)
if event == "-sl2-":
window["-txt2-"].update(int(values["-sl2-"]))
values_deep_copy = copy.deepcopy(values)
if event == "-btn1-":
window["-txt3-"].update(values.items())
values_deep_copy = copy.deepcopy(values)
if event == "-btn2-":
break
if event == eg.WIN_CLOSED:
break
system_tray.stop()
window.close()Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request