从另一个类python获取类变量的值

2024-10-01 09:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我正在为我的应用程序创建一个GUIwx.Python,当 处理按钮被按下,所以我试图执行一个线程 对于处理代码,它需要从主类和 同时设置从线程到主类的值。我试过了 从其他岗位看到过,但没有一个工作。在

Tl;dr,需要从类中获取值并修改值plspNombre获取并修改modtext

目标:

类线程应该从输入到类pls的用户中获取随机名称,并设置modtext的值

class TestThread(Thread):

    def __init__(self):
        Thread.__init__(self)
        self.start()


    def run(self):
        #try to get value from variable in the pls class
        randomName = self.pNombre.GetValue()

        for i in range (0,100):
           #this should modify modtext in pls class
           self.modtext.SetValue(str(i))

class pls(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, 'lilcode', size=(800, 600), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX)
        panel = wx.Panel(self)
        self.SetBackgroundColour('white')

    mylist = ['2', '3']
    scene = wx.SingleChoiceDialog(None, 'pick', 'pick', mylist)
    if scene.ShowModal() == wx.ID_OK:

        if escena.GetStringSelection() == "2":
            self.pNombre = wx.TextCtrl(panel, style = wx.TE_PROCESS_ENTER, pos=(240,40), size=(300, 20))
            self.pNombre.SetFocus()
            my_sizer.Add(self.pNombre, 0, wx.CENTER)

            self.modtext = wx.TextCtrl(panel, style = wx.TE_READONLY, pos = (50, 280), size = (700, 23))

            start = wx.Button(panel, label="process", pos = (350, 220), size=(70, 23))
            self.Bind(wx.EVT_BUTTON, self.initiate2d, start)
            panel.SetSizer(my_sizer)
            self.Show()

    def initiate2d(self, event):

        TestThread()

Tags: inposselfsizeinitstyledef线程
1条回答
网友
1楼 · 发布于 2024-10-01 09:16:56

在单击按钮时调用的函数所在的类中创建线程

没有必要创建另一个类。。。在

class pls(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, 'lilcode', size=(800, 600), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX)
        panel = wx.Panel(self)
        self.SetBackgroundColour('white')

    mylist = ['2', '3']
    scene = wx.SingleChoiceDialog(None, 'pick', 'pick', mylist)
    if scene.ShowModal() == wx.ID_OK:

        if escena.GetStringSelection() == "2":
            self.pNombre = wx.TextCtrl(panel, style = wx.TE_PROCESS_ENTER, pos=(240,40), size=(300, 20))
            self.pNombre.SetFocus()
            my_sizer.Add(self.pNombre, 0, wx.CENTER)

            self.modtext = wx.TextCtrl(panel, style = wx.TE_READONLY, pos = (50, 280), size = (700, 23))

            start = wx.Button(panel, label="process", pos = (350, 220), size=(70, 23))
            self.Bind(wx.EVT_BUTTON, self.initiate2da, start)
            panel.SetSizer(my_sizer)
            self.Show()

    def initiate2d(self):

        for i in range (0,100):
           #this should modify modtext in pls class
           self.modtext.SetValue(str(i))
    def initiate2da(self, event):
        threading.Thread(target = self.initiate2d).start()

相关问题 更多 >