📄 www11.py
字号:
#! /usr/bin/env python# www11.py -- display the contents of a URL in a Text widget# - set window title# - make window resizable# - update display while reading# - vertical scroll bar# - rewritten as class# - editable url entry and reload button# - error dialogimport sysimport urllibfrom Tkinter import *import Dialogdef main(): if len(sys.argv) != 2 or sys.argv[1][:1] == '-': print "Usage:", sys.argv[0], "url" sys.exit(2) url = sys.argv[1] viewer = Viewer() viewer.load(url) viewer.go()class Viewer: def __init__(self): # Create root window self.root = Tk() self.root.minsize(1, 1) # Create topframe for the entry and button self.topframe = Frame(self.root) self.topframe.pack({'fill': 'x'}) # Create a label in front of the entry self.urllabel = Label(self.topframe, {'text': 'URL:'}) self.urllabel.pack({'side': 'left'}) # Create the entry containing the URL self.entry = Entry(self.topframe, {'relief': 'sunken', 'border': 2}) self.entry.pack({'side': 'left', 'fill': 'x', 'expand': 1}) self.entry.bind('<Return>', self.loadit) # Create the button self.reload = Button(self.topframe, {'text': 'Reload', 'command': self.reload}) self.reload.pack({'side': 'right'}) # Create botframe for the text and scrollbar self.botframe = Frame(self.root) self.botframe.pack({'fill': 'both', 'expand': 1}) # The Scrollbar *must* be created first self.vbar = Scrollbar(self.botframe) self.vbar.pack({'fill': 'y', 'side': 'right'}) self.text = Text(self.botframe) self.text.pack({'expand': 1, 'fill': 'both', 'side': 'left'}) # Link Text widget and Scrollbar self.text['yscrollcommand'] = (self.vbar, 'set') self.vbar['command'] = (self.text, 'yview') self.url = None def load(self, url): # Load a new URL into the window fp, url = self.urlopen(url) if not fp: return self.url = url self.root.title(url) self.entry.delete('0', 'end') self.entry.insert('end', url) self.text.delete('0.0', 'end') while 1: line = fp.readline() if not line: break if line[-2:] == '\r\n': line = line[:-2] + '\n' self.text.insert('end', line) self.root.update_idletasks() fp.close() def urlopen(self, url): # Open a URL -- # return (fp, url) if successful # display dialog and return (None, url) for errors try: fp = urllib.urlopen(url) except IOError, msg: import types if type(msg) == types.TupleType and len(msg) == 4: if msg[1] == 302: m = msg[3] if m.has_key('location'): url = m['location'] return self.urlopen(url) elif m.has_key('uri'): url = m['uri'] return self.urlopen(url) self.errordialog(IOError, msg) fp = None return fp, url def errordialog(self, exc, msg): # Display an error dialog -- return when the user clicks OK Dialog.Dialog(self.root, { 'text': str(msg), 'title': exc, 'bitmap': 'error', 'default': 0, 'strings': ('OK',), }) def go(self): # Start Tk main loop self.root.mainloop() def reload(self, *args): # Callback for Reload button if self.url: self.load(self.url) def loadit(self, *args): # Callback for <Return> event in entry self.load(self.entry.get())main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -