[過去ログ] 【まず1嫁】くだすれPython(超初心者用) その59 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
771
(1): デフォルトの名無しさん [] 2024/06/26(水) 10:30:09.24 ID:esETAUdE(1/9) AAS
初心者です、tkinterで作ったGUIの反応が遅い
afterでマシにはなったんだけど
で、マウスクリックした時刻(OSでのクリック検知時点のシステム時刻)みたいなの取れる方法ありますか
やりたいことは、
クリック時刻とbindした関数が呼ばれた時刻をログに取ってみたい
Windowsです bindした関数が呼ばれる以前にユーザの作ったプログラムでクリック把握する方法、そんなのあるか!ではなくて、後追いででも確認できないものかと
772
(1): デフォルトの名無しさん [] 2024/06/26(水) 11:16:31.48 ID:esETAUdE(2/9) AAS
>>771 です
そのごググって下記のページで近いことが出来そうかと
本当は早くする方法が知りたいのだけど、今は何を聞けばいいのかもわからないのでまた後程
外部リンク:taida-eng.com
774
(2): デフォルトの名無しさん [] 2024/06/26(水) 14:53:45.89 ID:esETAUdE(3/9) AAS
>>773
773(1): デフォルトの名無しさん [sage] 2024/06/26(水) 14:03:59.21 ID:H6JHbd75(1) AAS
root.bind('<Button-1>', lambda _: print(datetime.datetime.now())
 ありがとうございます
早速やってみて、時刻がコンソール出力されることを確認しました

やってみると >>772 のリンク先のpynputを使用したほうが早い時刻を取得しており、
体感的にもpynputの時刻がマウス操作時刻と思われます

また、関数が呼ばれた時点の時刻も表示したら、
pynput -> 関数 -> rootにbindのラムダ関数の順に表示されました
わたくし、何か勘違いしてますでしょうか
pynputクリック検知 2024-06-26 14:46:54.026669
関数コール時時刻 2024-06-26 14:46:55.787093
クリック検知時刻 2024-06-26 14:46:56.076000 <- rootにバインドしたラムダ関数

pynputクリック検知 2024-06-26 14:41:35.307322
イベント発生時y 299
chartkobetu呼ばれました
選択中の銘柄 4208 型 <class 'str'>
個別5mの存在順i番目銘柄= 18 存在列 126 銘柄コード 4208 <class 'str'>
個別チャート日足、呼ばれました
j= 1 dfcoloffset= 1 linecolor= #ffff00
j= 2 dfcoloffset= 2 linecolor= #189af9
j= 3 dfcoloffset= 3 linecolor= #e38089
j= 4 dfcoloffset= 5 linecolor= #00ff00
クリック検知時刻 2024-06-26 14:41:38.955128
775: デフォルトの名無しさん [] 2024/06/26(水) 15:01:12.85 ID:esETAUdE(4/9) AAS
>>774の最後についているのは今作っているコードの動作状況を確認するためprintで出力しているものです
編集中に送信してしまいましたので、時刻検知とは関係ない内容で、時刻の取得時点の比較ができないデータです、すみません
777
(3): デフォルトの名無しさん [] 2024/06/26(水) 19:15:47.84 ID:esETAUdE(5/9) AAS
>>776
776(1): デフォルトの名無しさん [sage] 2024/06/26(水) 17:34:00.99 ID:zF60WWs1(1) AAS
>>774
メインスレッドをブロックして何か処理をしてるんでしょ

クリックすると時刻をprintするボタン1つだけ最低限のアプリで
クリックに対する反応がどの程度なのかを確認してみたらいいと思う
 レスありがとうございます
最小限だと同じ時刻になる、これ以上、細かい桁が測れるのかもよく分からないけど十分速いかと
pynputクリック検知 2024-06-26 19:09:50.128802
関数コール時時刻 2024-06-26 19:09:50.128802

Widgetを追加しながら作っていて、
最初にサンプル的なボタンを押してラベル文字書き変えの
プログラムでは応答性は何の問題にもならないレベルだったので、
まあこんなものかと
778: デフォルトの名無しさん [] 2024/06/26(水) 19:17:32.22 ID:esETAUdE(6/9) AAS
>>777ですけど

あまりに遅いので、cProfileで動作時間を測ってはいて
一番長い関数で138ms、
一方でpynputクリック検知 から 関数コール時時刻 までは1.76s
(14:46:55.787093 - 14:46:54.026669= 1.7604)
もっと遅くなることもある
2秒近くかかる処理なんか作ってないんだけど、さてどうしたものか
779: デフォルトの名無しさん [] 2024/06/26(水) 19:23:16.01 ID:esETAUdE(7/9) AAS
連投すまん

エクセルVBAで作っていたプログラムを練習がてらpython移植してみるんだけど、
VBAでいうDoEventsみたいなものはpython、tkinterには無い、ということでしょうか

ネット検索すると別スレッドで実行しろとか出てくるけど、こっちで考えたほうがいいのかどうか
781: デフォルトの名無しさん [] 2024/06/26(水) 22:20:47.89 ID:esETAUdE(8/9) AAS
>>780
780(1): デフォルトの名無しさん [] 2024/06/26(水) 21:33:53.43 ID:UcQAC2Co(1) AAS
VBAのDoEventsをどう使っているのか良うわからんが、subprocess.runじゃだめけ?
ありがとうございます

VBAのDoEventsが実行されると、OSのqueueに溜まっているユーザー操作が実行されます
もし1周0.2s程度のループをネストして100回やらせると約20秒間かかりきりで(応答なし)になるところ、
内側のループの最初(でなくてもいいけど)にDoEventsを入れれば約0.2s毎にユーザ操作の処理が入るので応答なしにはならず、
0.2sくらいならちょっと反応悪いかな、くらいのレスポンスになります(UI処理をやった分だけ、ループの完了は伸びる)

さて、subprocess.runを早速調べてみましたが、OSにやらせたいことをコマンド指定でやらせる、ということでしょうか
OS側で溜まってることがあるのならこのタイミングで済ませてな、なにがあるのかしらんけど、という使い方はできるのでしょうか
もう少し調べてみます
783
(1): デフォルトの名無しさん [] 2024/06/26(水) 23:01:35.15 ID:esETAUdE(9/9) AAS
>>782
782(1): デフォルトの名無しさん [sage] 2024/06/26(水) 22:40:40.89 ID:hSYD6qWQ(1) AAS
>>777
てことは君のコードが書き方が原因なのは確定なので
まずは再現性のある最小限のコードを提示してね
それ以外の話はそれから
はい、わたしの作ったコードが反応遅いという話をしています
そして最初の質問事項は、マウスクリックした時刻(OSでのクリック検知時点のシステム時刻)みたいなの取れる方法、でした
これはググって解決しました
以降の話はレスをいただいた方への返信と、DoEvents相当のものがあるかという質問です
エクセルはスレチかと思いますのでエクセルの話を続ける気はありません
引き続き自力でも調べてみます
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.513s*