質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1211閲覧

python+kivyでボタンからの再帰処理(定周期)停止

r00042

総合スコア0

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/08 07:07

編集2021/12/08 07:19

Python + kivy でGUIデスクトップアプリを作成しています。

下記のコードで実行したところ、「Run」ボタンを押した後、画面が触れなくなり固まってしまいます。
「Run」ボタンで再帰処理を実行、「Stop」ボタンで停止がやりたいことです。
threadingを使ってマルチスレッドで処理しようとしている所のがまずいのかなと思うのですが、解決策が浮かびません。


python

1import japanize_kivy 2import webbrowser 3import time 4import threading 5 6from kivy.app import App 7from kivy.uix.widget import Widget 8from kivy.uix.floatlayout import FloatLayout 9 10from kivy.properties import StringProperty 11from kivy.properties import NumericProperty 12 13from kivy.core.text import LabelBase, DEFAULT_FONT 14from kivy.resources import resource_add_path 15from kivy.clock import Clock 16 17 18class MainScreen(Widget): 19 site_url = StringProperty() 20 count = NumericProperty(0) 21 text = StringProperty() 22 interval_time = NumericProperty(0) 23 run_flg = True 24 25 def SiteAccess(self): 26 #webbrowser.open(self.site_url, 1) 27 print(self.count) 28 self.count += 1 29 time.sleep(self.interval_time) 30 Clock.schedule_once(self.update) 31 if MainScreen.run_flg: 32 th = threading.Thread(target=self.SiteAccess()) 33 th.start() 34 else: 35 print("end") 36 37 def buttonClicked(self): 38 self.text = 'OK' 39 self.count += 1 40 self.site_url = self.ids["text_url"].text 41 self.interval_time = self.ids["text_time"].text 42 th = threading.Thread(target=self.SiteAccess()) 43 th.start() 44 45 def buttonClicked2(self): 46 global run_flg 47 MainScreen.run_flg = False 48 49 def update(self): 50 self.ids.text_count.text = self.count 51 52 53class TicketApp(App): 54 def __init__(self, **kwargs): 55 super(TicketApp, self).__init__(**kwargs) 56 57 def build(self): 58 return MainScreen() 59 60if __name__ == '__main__': 61 TicketApp().run()

kv

1 2<MainScreen>: 3 BoxLayout: 4 orientation: 'vertical' 5 size: root.size 6 BoxLayout: 7 size: root.size 8 pos: root.pos 9 size_hint_y: 10 10 Label: 11 id: label1 12 size_hint_x: 20 13 font_size: 16 14 text: "SITE URL :" 15 canvas.before: 16 Color: 17 rgba: .68, .73, 1, .5 18 Rectangle: 19 pos: self.pos 20 size: self.size 21 TextInput: 22 id: text_url 23 size_hint_x: 80 24 font_size: 16 25 text: "http://reserve.tokyodisneyresort.jp/" 26 foreground_color:1,0.5,0,1 27 #canvas.before: 28 # Color: 29 # rgba: .68, .73, 1, .5 30 # Rectangle: 31 # pos: self.pos 32 # size: self.size 33 BoxLayout: 34 size: root.size 35 pos: root.pos 36 size_hint_y: 10 37 Label: 38 id: label2 39 size_hint_x: 20 40 font_size: 16 41 text: "interval time :" 42 canvas.before: 43 Color: 44 rgba: .68, .73, 1, .5 45 Rectangle: 46 pos: self.pos 47 size: self.size 48 TextInput: 49 id: text_time 50 size_hint_x: 20 51 font_size: 16 52 foreground_color:1,0.5,0,1 53 text:"5" 54 #canvas.before: 55 # Color: 56 # rgba: .68, .73, 1, .5 57 # Rectangle: 58 # pos: self.pos 59 # size: self.size 60 Label: 61 size_hint_x: 60 62 font_size: 16 63 text: "(sec)" 64 text_size: self.size 65 halign: 'left' 66 valign: 'bottom' 67 padding: 10,10 68 canvas.before: 69 Color: 70 rgba: .68, .73, 1, .5 71 Rectangle: 72 pos: self.pos 73 size: self.size 74 BoxLayout: 75 size: root.size 76 pos: root.pos 77 size_hint_y: 10 78 Label: 79 id: label3 80 size_hint_x: 20 81 font_size: 16 82 text: "access count :" 83 canvas.before: 84 Color: 85 rgba: .68, .73, 1, .5 86 Rectangle: 87 pos: self.pos 88 size: self.size 89 Label: 90 id: text_count 91 size_hint_x: 80 92 font_size: 16 93 text: str(root.count) 94 canvas.before: 95 Color: 96 rgba: .68, .73, 1, .5 97 Rectangle: 98 pos: self.pos 99 size: self.size 100 BoxLayout: 101 size: root.size 102 pos: root.pos 103 size_hint_y: 70 104 Button: 105 id: button1 106 text: "Run" 107 font_size: 68 108 on_press: root.buttonClicked() 109 Button: 110 id: button2 111 text: "Stop" 112 font_size: 68 113 on_press: root.buttonClicked2()

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

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

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

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

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

guest

回答1

0

自己解決

解決しました。

th = threading.Thread(target=self.SiteAccess())

th = threading.Thread(target=self.SiteAccess)

でした。

投稿2021/12/09 01:37

r00042

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問