?? btdownloadgui.py
字號:
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:])
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -