Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将python脚本添加到GUI?_Python_User Interface_Wxpython - Fatal编程技术网

如何将python脚本添加到GUI?

如何将python脚本添加到GUI?,python,user-interface,wxpython,Python,User Interface,Wxpython,我在向GUI添加脚本时遇到问题。Python脚本(运行爬网和比较刮取的日期)和GUI工作良好。我不知道该怎么做,我只是将代码复制到“def run”中,但随后出现错误:“valueerror:signal仅在主线程中工作”。有人能解释一下我怎么做吗?谢谢 import wx import wx.lib.mixins.listctrl as listmix from threading import * musicdata = { 0 : ("1", "The Price Of Love

我在向GUI添加脚本时遇到问题。Python脚本(运行爬网和比较刮取的日期)和GUI工作良好。我不知道该怎么做,我只是将代码复制到“def run”中,但随后出现错误:“valueerror:signal仅在主线程中工作”。有人能解释一下我怎么做吗?谢谢

import wx
import wx.lib.mixins.listctrl as listmix
from threading import *

musicdata = {
    0 : ("1", "The Price Of Love", "Rock"),
    1 : ("2", "Tom's Diner", "Rock"),
    2 : ("4", "Praying For Time", "Rock"),
    3 : ("3", "Here We Are", "Rock"),
    4 : ("Linda Ronstadt", "Don't Know Much", "Rock"),
    5 : ("Michael Bolton", "How Am I Supposed To Live Without You", "Blues"),
    6 : ("Paul Young", "Oh Girl", "Rock"),
    }


class WorkerThread(Thread):

    def __init__(self, event):
        Thread.__init__(self)       
        self._want_abort = 0       
        self.start()

    def run(self):
        while not self._want_abort:

            #Here should I place code from script?

            if self._want_abort:
                     return


    def abort(self):
        self._want_abort = 1
########################################################################
class TestListCtrl(wx.ListCtrl):

    #----------------------------------------------------------------------
    def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition,
                 size=wx.DefaultSize, style=0):
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)


########################################################################
class TestListCtrlPanel(wx.Panel, listmix.ColumnSorterMixin):

    #----------------------------------------------------------------------
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer1 = wx.BoxSizer(wx.HORIZONTAL)

        self.list_ctrl = TestListCtrl(self, size=(-1,100),
                         style=wx.LC_REPORT
                         |wx.BORDER_SUNKEN
                         |wx.LC_SORT_ASCENDING
                         )
        self.list_ctrl.InsertColumn(0, "%")
        self.list_ctrl.InsertColumn(1, "Bookmakers")
        self.list_ctrl.InsertColumn(2, "Date", wx.LIST_FORMAT_RIGHT)
        self.list_ctrl.InsertColumn(3, "League")
        self.list_ctrl.InsertColumn(4, "Teams")
        self.list_ctrl.InsertColumn(5, "1")
        self.list_ctrl.InsertColumn(6, "X")        
        self.list_ctrl.InsertColumn(7, "2")
        self.list_ctrl.InsertColumn(8, "Link") 
        items = musicdata.items()
        index = 0
        for key, data in items:
            self.list_ctrl.InsertStringItem(index, data[0])
            self.list_ctrl.SetStringItem(index, 1, data[1])
            self.list_ctrl.SetStringItem(index, 2, data[2])
            self.list_ctrl.SetStringItem(index, 3, data[2])
            self.list_ctrl.SetItemData(index, key)
            index += 1

        # Now that the list exists we can init the other base class,
        # see wx/lib/mixins/listctrl.py
        self.itemDataMap = musicdata
        listmix.ColumnSorterMixin.__init__(self, 3)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list_ctrl)


        sizer.Add(sizer1, .1, wx.ALL|wx.EXPAND, 5)
        self.SetSizer(sizer)

        button1 = wx.Button(self,-1,"START")
        self.Bind( wx.EVT_BUTTON,self.button1,button1)
        sizer1.Add(button1,0,0,0)

        button2 = wx.Button(self,-1,"STOP")
        self.Bind( wx.EVT_BUTTON,self.button2,button2)
        sizer1.Add(button2,0,0,0)

        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2.Add(self.list_ctrl,1,wx.EXPAND)
        sizer.Add(sizer2,1,wx.EXPAND)


    def button1(self,event):
        self.worker = None
        if not self.worker:
            self.worker = WorkerThread(self)

    def button2(self, event):
        if self.worker:
          self.worker.abort() 


    #----------------------------------------------------------------------
    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
    def GetListCtrl(self):
        return self.list_ctrl

    #----------------------------------------------------------------------
    def OnColClick(self, event):
        print "column clicked"
        event.Skip()

########################################################################
class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Test Program", size=(1000,600))

        a = TestListCtrlPanel(self)

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

您有一个格式问题,看起来
class
之前的第一位缩进了一段额外的时间。你能把它改成实际代码的样子吗?如果你的脚本需要很长时间才能运行,那么你应该把它放到线程中或者从线程调用它。任何一种方法都应该有效。你能发布一个你的爬虫的小例子,让我们看看它的功能吗?我怀疑这是引发错误的原因,因为您提到的异常似乎与wxPythonAt无关。在开始脚本中,运行两个爬行器:process=CrawlerProcess(get_project_settings())process.crawl('test',domain='..com')process.crawl('pin',domain='..com')process start()爬行器以csv格式保存数据,然后,我的脚本打开csv文件并比较日期。GUI脚本甚至不能与前一条评论中附加的代码一起工作。@whrrgarbl我编辑了代码,这是写文章的错误。