📄 textstat.pyw
字号:
# Stian Haklev: change tab so we can change back afterwards, # and get an updated list view - at least needed on Mac self.tabPages.ChangePage(s['KorpusTab']) self.status.set(s['StatusSuchKonk']) self.konkliste.delete(0, END) konkRes = self.korpus.getWordConc( pattern=such, ganzWort=self.konkGanzewoerter.get(), grossklein=self.konkGrossklein.get(), cL=self.konkContextL.get(), cR=self.konkContextR.get(), sort=self.sortModusKonk.get(), markKonk=self.markKonk.get() ) self.suchwort.delete(0, END) self.suchwort.insert(END, self.korpus.suchKonk) for x in konkRes: self.konkliste.insert(END, (x[0],)) self.tabPages.ChangePage(s['ConcTab']) self.status.set(s['StatusTreffer'] % self.konkliste.size() ) except StandardError, details: self.warnung(titel=s['Error'], text=s['ErrSelect']) self.busyCursorOff() def zeigZitat(self, event=''): self.zitat.delete(1.0, END) konk = self.konkliste.curselection() konk = int(konk[0]) cL = int(cfg['zitContextL']) cR = int(cfg['zitContextR']) res = self.korpus.getContext(konk, contextL=cL, contextR=cR) self.zitat.insert(END, '\n') self.zitat.insert(END, self.korpus.db[self.korpus.zitatDatei]['path'], ('oeffnen', 'blau')) self.zitat.insert(END, s['ZToeffnen2']) self.zitat.insert(END, '\n- - - - -\n\n') self.zitat.insert(END, res[0]) self.zitat.insert(END, res[1], 'rot') self.zitat.insert(END, res[2]) self.tabPages.ChangePage(s['ZitatTab']) def zitatDatei_oeffnen(self, event=''): try: # etwas krampfig, da os.startfile()und webbrowser keine # Unicode-Dateinamen unterstuetzen dateipfad = self.korpus.db[self.korpus.zitatDatei]['path'] dateipfad = dateipfad.encode(sys.getfilesystemencoding()) webbrowser.open(dateipfad) except StandardError, details: meldung = s['ErrFileOpen'] + '\n\n' + str(details) self.warnung(titel=s['Error'], text=meldung)############ Allerlei Hilfsfunktionen def optionen_speichern(self): try: cfg['Benutzersprache'] = self.sprache_aendern.get() cfg['fenster'] = self.root.geometry() cfg['freqMin'] = self.minFreq.get() cfg['freqMax'] = self.maxFreq.get() cfg['konkContextL'] = self.konkContextL.get() cfg['konkContextR'] = self.konkContextR.get() cfg['FileKodierung'] = self.dateiart.get() try: cfg['LetzteKorpusFiles0'] = self.LetzteKorpusFiles[0] cfg['LetzteKorpusFiles1'] = self.LetzteKorpusFiles[1] cfg['LetzteKorpusFiles2'] = self.LetzteKorpusFiles[2] cfg['LetzteKorpusFiles3'] = self.LetzteKorpusFiles[3] except: pass f = open(cfgFile, 'w') cPickle.dump(cfg, f) f.close() except: self.warnung(s['Error'], s['ErrOptSave']) def add_recent(self,filename=''): filename = os.path.normpath(filename) # SH: adds recent file to the recent files list, removing it first if it already exists if(self.LetzteKorpusFiles.count(filename)) > 0: self.LetzteKorpusFiles.remove(filename) self.LetzteKorpusFiles.insert(0,filename) self.update_recentfiles_menu() def remove_recent(self,filename=''): # SH: remove file from recent files list if it is on the list if(self.LetzteKorpusFiles.count(filename)) > 0: self.LetzteKorpusFiles.remove(filename) self.update_recentfiles_menu() # SH: update recent files - deletes all previous menu entries and adds the last four opened def update_recentfiles_menu(self): try: # SH:designed so that if there are only 2 latest files, self.recentfilesmenu.delete(0,3) # they will be added, and it will fail gracefully filename=self.LetzteKorpusFiles[0] # SH: check if there are any latest files self.filemenu.entryconfigure(6,state=ACTIVE) # SH: only if the previous command worked, ie there is at least # one active file for i in range(0,4): f = self.LetzteKorpusFiles[i] callback = self.__korpus_open(f) self.recentfilesmenu.add_command(label=f, underline=0, command = callback) except: pass # SH: helping function for the open recent files since Tk Menubuttons cannot accept commands with arguments # (idea taken from IDLE source) def __korpus_open(self,f): def korpus_open_caller(f=f): self.korpus_open(f) return korpus_open_caller def export2excel(self): wortliste = self.freqliste.get(0, END) if len(wortliste) > 65000: self.warnung(s['ErrExport'], s['ErrExcel65K'] % len(wortliste)) else: try: if len(wortliste) > 1: wortliste = [(a.strip(), b.strip()) for (a, b) in wortliste] meinXL = Dispatch("Excel.Application") meinXL.Visible = 1 meinXL.Workbooks.Add() tabelle = meinXL.Workbooks(1).Sheets(1) tabelle.Cells(2,1).Value = 'ACHTUNG - ATTENTION' tabelle.Cells(3,1).Value = 'Dies kann dauern...' tabelle.Cells(4,1).Value = 'This can take a while...' titel = '%(Titel)s %(Version)s' % s titel = unicode(titel, 'latin-1') tabelle.Cells(2,4).Value = titel tabelle.Cells(3,4).Value = unicode(s['Copyright'], 'latin-1') tabelle.Cells(4,4).Value = unicode(s['ProgURL'], 'latin-1') tabelle.Range(tabelle.Cells(1,1), tabelle.Cells(len(wortliste),2)).Value=wortliste else: self.warnung(s['ErrExport'], s['ErrNoFreqList']) except: self.warnung(s['ErrExport'], s['ErrExcel']) def export2csv(self): try: wortliste = self.freqliste.get(0, END) wortliste = [(a.strip(), b.strip()) for (a, b) in wortliste] inhalt = StringIO.StringIO() for x in wortliste: inhalt.write( '%s, %s\n' % (x[0], x[1]) ) # zum Schreiben holen wir uns erst die gew黱schte Kodierung # kodier = self.dateiart.get() # 09/2008 gestrichen: wir schreiben immer UTF-8 inhalt = inhalt.getvalue() inhalt = inhalt.encode('utf_8', 'replace') d = tkFileDialog.asksaveasfile(defaultextension='.csv', initialdir=cfg['KorpDir']) d.write(inhalt) d.close() self.status.set(s['StatusExpFreq']) except: self.warnung(s['ErrExport'], s['ErrExpFreq']) def export2word(self): konkliste = self.konkliste.get(0,END) if len(konkliste) > 0: inhalt = "%(Titel)s %(Version)s\n%(Copyright)s\n(%(ExportHinweis)s)\n\n" % s inhalt = unicode(inhalt, 'latin-1') inhalt = inhalt + '\n\n'.join(konkliste) try: # Word starten, leeres Document 鰂fnen, Text einf黦en meinWord = Dispatch('Word.Application') meinWord.Visible = 1 meinDoc = meinWord.Documents.Add() meinWo = meinDoc.Range(0,0) meinWo.InsertBefore(inhalt) except: self.warnung(s['ErrExport'], s['ErrWord']) else: self.warnung(s['ErrExport'], s['ErrNoKonkList']) def export2txt(self): konkliste = self.konkliste.get(0,END) if len(konkliste) > 1: inhalt = "%(Titel)s %(Version)s\n%(Copyright)s\n(%(ExportHinweis)s)\n\n" % s inhalt = unicode(inhalt, 'latin-1') inhalt = inhalt + '\n'.join(konkliste) try: # zum Schreiben holen wir uns erst die gew黱schte Kodierung # kodier = self.dateiart.get() # 09/2008 gestrichen: wir schreiben immer UTF-8 inhalt = inhalt.encode('utf_8', 'replace') d = tkFileDialog.asksaveasfile(defaultextension='.txt', initialdir=cfg['KorpDir']) d.write(inhalt) d.close() self.status.set(s['StatusExpKonk']) except: self.warnung(s['ErrExport'], s['ErrExpKonk']) def copy2clipboard(self): self.root.clipboard_clear() txt = '' if self.tabPages.GetActivePage() == s['ZitatTab']: try: txt = self.zitat.get(SEL_FIRST, SEL_LAST) except TclError, details: self.warnung(titel=s['Error'], text=s['ErrSelect']) elif self.tabPages.GetActivePage() == s['ConcTab']: txt = self.konkliste.get(self.konkliste.curselection())[0] elif self.tabPages.GetActivePage() == s['FormenTab']: a,b = self.freqliste.get(self.freqliste.curselection()) a = a.strip() b = b.strip() txt = a + ' - ' + b elif self.tabPages.GetActivePage() == s['KorpusTab']: l = [] for i in self.datliste.curselection(): l.append(self.datliste.get(i)) txt = '\n'.join(l) self.root.clipboard_append(txt) self.status.set(s['StatusClip']) # self.info('', txt) def busyCursorOn(self): # Cursor auf 'busy/wait' self.root.config(cursor='watch') self.root.update_idletasks() self.root.update() def busyCursorOff(self): # Cursor auf 'normal' self.root.config(cursor='') self.root.update_idletasks() self.root.update() def statusAktualisieren(self, event=''): if self.tabPages.GetActivePage() == s['FormenTab']: if self.korpus != None: self.status.set( s['StatusFormen'] % (self.freqliste.size(), self.korpus.anzahlTokens) ) else: self.status.set(' ') if self.tabPages.GetActivePage() == s['ConcTab']: self.status.set( s['StatusTreffer'] % self.konkliste.size() ) if self.tabPages.GetActivePage() == s['Korpus']: if self.korpus != None: self.status.set( s['StatusKorpDat'] % (self.korpus.getDbName(), self.dateiart.get()) ) else: self.status.set( s['Willkommen'] ) def info(self, titel='', text=''): tkMessageBox.showinfo(titel, text) def warnung(self, titel='', text=''): tkMessageBox.showwarning(titel, text) def sprachwarnung(self): self.optionen_speichern() self.warnung(s['SpracheAendern'], s['SpracheInfo']) def about(self): # self.info('', self.tabPages.GetActivePage()) info = "%(Titel)s %(Version)s\n(%(VersionDatum)s)\n\n%(Copyright)s\n%(eMail)s\n\n%(ProgURL)s \n\n%(ProgInfo)s" % s self.info('TextSTAT', info) def regex_hilfe(self): try: webbrowser.open("http://docs.python.org/lib/re-syntax.html") except: self.warnung(titel=s['Error'], text=s['ErrFileOpen']) def ende(self): self.optionen_speichern() if self.korpus != None and self.korpus.dbGeaendert == 1: # self.info(text= str(self.korpus.dbGeaendert)) m = tkMessageBox.Message( title=s['ProgBeenden'], message=s['AbfrageEnde'], icon=tkMessageBox.QUESTION, type=tkMessageBox.YESNOCANCEL) reply = m.show() if reply == 'yes': self.korpus_save() self.root.destroy() self.root.quit() elif reply == 'no': self.root.destroy() self.root.quit() else: pass else: self.root.destroy() self.root.quit()if __name__ == '__main__': app = GUI(root) root.mainloop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -