⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btdownloadgui.py

📁 DELPHI实现的BT下载工具源代码. 可以值得参考.
💻 PY
📖 第 1 页 / 共 2 页
字号:
            connChoices[num]['rate']['max']/connChoices[num]['rate'].get('div',1))
        self.rateslider.SetValue (
            connChoices[num]['rate']['def']/connChoices[num]['rate'].get('div',1))
        self.rateLowerText.SetLabel ('  %d' % (connChoices[num]['rate']['min']))
        self.rateUpperText.SetLabel ('%d' % (connChoices[num]['rate']['max']))
        self.connSpinner.SetValue (connChoices[num]['conn']['def'])
        self.connSpinner.SetRange (connChoices[num]['conn']['min'],
                                   connChoices[num]['conn']['max'])
        self.connslider.SetRange (connChoices[num]['conn']['min'],
                                  connChoices[num]['conn']['max'])
        self.connslider.SetValue (connChoices[num]['conn']['def'])
        self.connLowerText.SetLabel ('  %d' % (connChoices[num]['conn']['min']))
        self.connUpperText.SetLabel ('%d' % (connChoices[num]['conn']['max']))
        self.onConnScroll (0)
        self.onRateScroll (0)
        self.dow.setInitiate (connChoices[num].get('initiate', 40))

    def about(self, event):
        if (self.aboutBox is not None):
            try:
                self.aboutBox.Close ()
            except wxPyDeadObjectError, e:
                self.aboutBox = None

        self.aboutBox = wxFrame(None, -1, 'About BitTorrent ', size = wxSize(405,230))

        panel = wxPanel(self.aboutBox, -1, size = wxSize (400,220))
        colSizer = wxFlexGridSizer(cols = 1, vgap = 3)

        titleSizer = wxBoxSizer(wxHORIZONTAL)
        aboutTitle = wxStaticText(panel, -1, 'BitTorrent ' + version)
        aboutTitle.SetFont(wxFont(14, wxNORMAL, wxNORMAL, wxNORMAL, false))
        titleSizer.Add (aboutTitle)
        linkDonate = wxStaticText(panel, -1, 'Donate to Bram', style = wxALIGN_RIGHT)
        linkDonate.SetForegroundColour('Blue');
        linkDonate.SetFont(wxFont(-1, wxNORMAL, wxNORMAL, wxNORMAL, true))
        titleSizer.Add (linkDonate, 1, wxALIGN_BOTTOM&wxEXPAND)
        colSizer.Add(titleSizer, 0, wxEXPAND)

        aboutAuthor = wxStaticText(panel, -1, 'created by Bram Cohen, Copyright 2001-2003\n')
        colSizer.Add(aboutAuthor)

        systemInformation = wxStaticText(panel, -1,
          'exact Version String: ' + version + '\n'+
          'Python version: ' + sys.version + '\n')
        colSizer.Add(systemInformation)

        babble1 = wxStaticText(panel, -1,
         'This is an experimental, unofficial build of BitTorrent.\n' +
         'It is Free Software under an MIT-Style license.')
        babble2 = wxStaticText(panel, -1,'BitTorrent Homepage')
        babble2.SetForegroundColour('Blue');
        babble2.SetFont(wxFont(-1, wxNORMAL, wxNORMAL, wxNORMAL, true))
        babble4 = wxStaticText(panel, -1,'Experimental Client Homepage')
        babble4.SetForegroundColour('Blue');
        babble4.SetFont(wxFont(-1, wxNORMAL, wxNORMAL, wxNORMAL, true))
        babble6 = wxStaticText(panel, -1, 'License Terms')
        babble6.SetForegroundColour('Blue');
        babble6.SetFont(wxFont(-1, wxNORMAL, wxNORMAL, wxNORMAL, true))
        colSizer.Add (babble1)
        colSizer.Add (babble2)
        colSizer.Add (babble4)
        colSizer.Add (babble6)

        okButton = wxButton(panel, -1, 'Ok')
        colSizer.Add(okButton, 0, wxALIGN_RIGHT)
        colSizer.AddGrowableCol(0)

        border = wxBoxSizer(wxHORIZONTAL)
        border.Add(colSizer, 1, wxEXPAND | wxALL, 4)
        panel.SetSizer(border)
        panel.SetAutoLayout(true)

        EVT_LEFT_DOWN(linkDonate, self.donatelink)
        EVT_LEFT_DOWN(babble2, self.aboutlink)
        EVT_LEFT_DOWN(babble4, self.explink)
        EVT_LEFT_DOWN(babble6, self.licenselink)
        EVT_BUTTON(self.aboutBox, okButton.GetId(), self.closeAbout)

        self.aboutBox.Show ()

    def closeAbout(self, event):
        self.aboutBox.Close ()

    def donatelink(self, event):
        Thread(target = self.donatelink2).start()

    def donatelink2(self):
        open_new('https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=bram@bitconjurer.org&item_name=BitTorrent&amount=5.00&submit=donate')

    def aboutlink(self, event):
        Thread(target = self.aboutlink2).start()

    def aboutlink2(self):
        open_new('http://bitconjurer.org/BitTorrent/')

    def explink(self, event):
        Thread(target = self.explink2).start()

    def explink2(self):
        open_new('http://ei.kefro.st/projects/btclient/')

    def licenselink(self, event):
        Thread(target = self.licenselink2).start()

    def licenselink2(self):
        open_new('http://ei.kefro.st/projects/btclient/LICENSE.TXT')

    def onInvoke(self, event):
        if not self.flag.isSet():
            apply(event.func, event.args, event.kwargs)

    def invokeLater(self, func, args = [], kwargs = {}):
        if not self.flag.isSet():
            wxPostEvent(self.frame, InvokeEvent(func, args, kwargs))

    def updateStatus(self, fractionDone = None,
            timeEst = None, downRate = None, upRate = None,
            activity=None, up = None, down = None):
        self.invokeLater(self.onUpdateStatus, [fractionDone, timeEst, downRate, upRate, activity, up, down])

    def onUpdateStatus(self, fractionDone, timeEst, downRate, upRate, activity, up, down):
        if fractionDone is not None and not self.fin:
            self.gauge.SetValue(int(fractionDone * 1000))
            self.frame.SetTitle('%d%% %s - BitTorrent %s' % (int(fractionDone*100), self.filename, version))
        if timeEst is not None:
            self.timeEstText.SetLabel(hours(timeEst))
        if activity is not None and not self.fin:
            self.timeEstText.SetLabel(activity)
        if downRate is not None:
            self.downRateText.SetLabel('%.0f kB/s' % (float(downRate) / (1000)))
        if upRate is not None:
            self.upRateText.SetLabel('%.0f kB/s' % (float(upRate) / (1000)))
        if down is not None:
            self.downText.SetLabel('%.2f MiB' % (float(down) / (1 << 20)))
        if up is not None:
            self.upText.SetLabel('%.2f MiB' % (float(up) / (1 << 20)))

    def finished(self):
        self.fin = true
        self.invokeLater(self.onFinishEvent)

    def failed(self):
        self.fin = true
        self.invokeLater(self.onFailEvent)

    def error(self, errormsg):
        self.invokeLater(self.onErrorEvent, [errormsg])

    def onFinishEvent(self):
        self.timeEstText.SetLabel('Download Succeeded!')
        self.cancelButton.SetLabel('Finish')
        self.gauge.SetValue(1000)
        self.frame.SetTitle('%s - Upload - BitTorrent %s' % (self.filename, version))
        self.downRateText.SetLabel('')

    def onFailEvent(self):
        self.timeEstText.SetLabel('Failed!')
        self.cancelButton.SetLabel('Close')
        self.gauge.SetValue(0)
        self.downRateText.SetLabel('')

    def onErrorEvent(self, errormsg):
        self.errorText.SetLabel(strftime('ERROR (%I:%M %p) -\n') + errormsg)

    def chooseFile(self, default, size, saveas, dir):
        f = Event()
        bucket = [None]
        self.invokeLater(self.onChooseFile, [default, bucket, f, size, dir])
        f.wait()
        return bucket[0]
    
    def onChooseFile(self, default, bucket, f, size, dir):
        if dir:
            dl = wxDirDialog(self.frame, 'Choose a directory to save to, pick a partial download to resume', 
                join(getcwd(), default), style = wxDD_DEFAULT_STYLE | wxDD_NEW_DIR_BUTTON)
        else:
            dl = wxFileDialog(self.frame, 'Choose file to save as, pick a partial download to resume', '', default, '*.*', wxSAVE)
        if dl.ShowModal() != wxID_OK:
            self.done(None)
        else:
            bucket[0] = dl.GetPath()
            self.fileNameText.SetLabel('%s (%.1f MB)' % (default, float(size) / (1 << 20)))
            self.timeEstText.SetLabel('Starting up...')
            self.fileDestText.SetLabel(dl.GetPath())
            self.filename = default
            self.frame.SetTitle(default + '- BitTorrent ' + version)
        f.set()

    def newpath(self, path):
        self.fileDestText.SetLabel(path)

    def done(self, event):
        self.flag.set()
        self.frame.Destroy()

class btWxApp(wxApp):
    def __init__(self, x, params):
        self.params = params
        wxApp.__init__(self, x)

    def OnInit(self):
        doneflag = Event()
        d = DownloadInfoFrame(doneflag)
        self.SetTopWindow(d.frame)
        thread = Thread(target = next, args = [self.params, d, doneflag])
        thread.setDaemon(false)
        thread.start()
        return 1

def run(params):
    app = btWxApp(0, params)
    app.MainLoop()

def next(params, d, doneflag):
    dow = Download ()
    d.dow = dow
    dow.download(params, d.chooseFile, d.updateStatus, d.finished, d.error, doneflag, 100, d.newpath)
    if not d.fin:
        d.failed()

if __name__ == '__main__':
    run(argv[1:])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -