著作権:オリジナルの作品は、転送するために歓迎します!添付のリンクを転送https://blog.csdn.net/qq_26369907/article/details/90408513
このレコードには、wxPythonをしてUIをしながら、彼はピットに飛び込みました。
概要:
1.まず、言語自体が言語を習得するためのモジュールが付属しているかどうか確認してください。例えばjion組み合わせる強力なマルチスレッドのスレッド機能を、(のpython3)と複数のスレッドを使用する場合は、setdaemon()関数は、スレッドのより柔軟な、第一と考えられるが、wxPythonのは、独自のマルチスレッド機能が付属してPythonで書かれたUIフレームワークです。
- wx.PostEvent
- wx.CallAfter
- wx.CallLater
3は直接ように、UIカトンを起こし立ち往生し、スレッド、丸め。組み合わせwxPythonのは、マルチスレッド機能がうまく機能が付属しています。
2.複数のスレッドを使用してUIを行い、メインスレッドのUI表示関連データがプロットされていることを推奨し、子スレッドのみ論理処理。たとえば:メインUIスレッドが現在のイベントハンドラの終了後に送られた子スレッドを処理することができた後、メッセージwxPythonの中性子スレッドがメソッドwx.CallAfter(呼び出します)、これはwxPythonのニュース中性子スレッドへの最も簡単な方法は、メインスレッドに送信されます。
場合は、
メインスレッドでの開始時期、子スレッド出力プログレスバーを実装します。
# coding = utf-8
import wx
import time
import threading
class ProgressBarThread(threading.Thread):
"""进度条类 """
def __init__(self, parent):
"""
:param parent: 主线程UI
:param timer: 计时器
"""
super(ProgressBarThread, self).__init__() # 继承
self.parent = parent
self.setDaemon(True) # 设置为守护线程, 即子线程是守护进程,主线程结束子线程也随之结束。
def run(self):
count = 0
while count < 5:
count = count + 0.5
time.sleep(0.5)
wx.CallAfter(self.parent.update_process_bar, count) # 更新进度条进度
wx.CallAfter(self.parent.close_process_bar) # destroy进度条
class CounterThread(threading.Thread):
“”计时类“”
def __init__(self, parent):
super(CounterThread, self).__init__()
self.parent = parent
self.setDaemon(True)
def run(self):
i = 0
while i < 5:
i += 1
print(i)
time.sleep(1)
class AppUI(wx.Frame):
def __init__(self, parent, title="test thread"):
wx.Frame.__init__(self, parent, title=title)
self.Center()
self.panel = wx.Panel(parent=self)
self.button_panel = wx.Panel(self.panel)
self.button_start = wx.Button(self.panel, wx.ID_ANY, label="开始")
self.button_start.Bind(wx.EVT_BUTTON, self.on_click_start)
self.dialog = None
def update_process_bar(self, count):
self.dialog.Update(count)
def close_process_bar(self):
self.dialog.Destroy()
def on_click_start(self, evt):
self.dialog = wx.ProgressDialog("录音进度", "Time remaining", 5, style=wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_REMAINING_TIME)
self.progress_1 = ProgressBarThread(self)
self.progress_1.start()
self.counter = CounterThread(self)
self.counter.start()
if __name__ == "__main__":
app = wx.App(False)
AppUI(None).Show()
app.MainLoop()
UI図:
参考リンク:
https://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
https://blog.csdn.net/fengmm521/article/details/78446413