윈도우 7, 64 비트, MSYS2 Mingw64 쉘 (쉘 시작 명령은 C:\msys64\msys2_shell.cmd -use-full-path -mingw64
)에서 테스트 중입니다. 여기에 pacman
: mingw-w64-x86_64-python2-2.7.13-1
, mingw-w64-x86_64-wxWidgets-3.0.2-17
및 mingw-w64-x86_64-wxPython-3.0.2.0-6
을 통해 설치했습니다.MSYS2의 wxPython : 스레드 처리기의 SetLabel이 동결됩니까?
제목 레이블, 단추 및 대상 레이블 만있는이 코드를 고려하십시오. 버튼을 클릭하면, 라벨은 "X"에서 "1"로 변경한다 : 나는 그대로이 코드를 실행하면
import wx #, wx.html
import sys, os
from threading import Thread
# disable buffering (Windows)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0)
class Frame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.label = wx.StaticText(self, wx.ID_ANY, "Click the button to change label below: ")
self.bt_main = wx.Button(self, label="Click ME")
self.bt_main.Bind(wx.EVT_BUTTON, self.BtnClickHandler)
self.label2 = wx.StaticText(self, wx.ID_ANY, "XX")
sizer_vmain_app = wx.BoxSizer(wx.VERTICAL)
sizer_vmain_app.Add(self.label, proportion=0, flag=wx.EXPAND, border=0)
sizer_vmain_app.Add(self.bt_main, proportion=0, flag=0, border=0)
sizer_vmain_app.Add(self.label2, proportion=0, flag=0, border=0)
self.SetSizer(sizer_vmain_app)
self.Layout()
def BtnClickHandler(self, event):
testThread = Thread(target=self.DoBtnClick)
testThread.start()
testThread.join()
def DoBtnClick(self):
print("BtnClickHandler ")
myval = int("1")
self.label2.SetLabel(str(myval))
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
app_frame = Frame(None, wx.ID_ANY, "")
app.SetTopWindow(app_frame)
app_frame.Show()
app.MainLoop()
는 다음 응용 프로그램이 정지 그것은 self.label2.SetLabel(str(myval))
에 관해서. 내가 대신이 기능을 스레딩을 피하고, 사용하는 경우
그러나 :
def BtnClickHandler(self, event):
# testThread = Thread(target=self.DoBtnClick)
# testThread.start()
# testThread.join()
self.DoBtnClick()
은 ... 다음 모든 작동합니다. 이 스크립트는 MSYS2 Mingw64 셸에서 python test.py
을 실행하여 호출합니다.
Windows에서 스레딩을 사용하여이 코드를 실행할 수 있습니까? 그렇다면 어떻게해야합니까? (그렇지 않으면 리눅스에서 쓰레딩과 함께 문제없이 실행됩니다)
wxpython 데모를 보셨습니까? – Igor
고마워요 @ 로고 - 아니, 그게 무슨 차이가 있니? 그게 어떻게이 문제에 도움이됩니까? – sdaau
죄송합니다. 내 대답은 아래를 참조하십시오. – Igor