1
Tkinter中,一个控件可能属于另一个控件,这时另一个控件就是这个控件的master。默认一个窗口没有master,因此master有None的默认值。总而言之:组件的master属性即指代该承载该组件的父容器(Tk, Frame等)。
2
一个有继承关系的类:
class Frm(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Button(self, text='Spam', command=quit).pack()
- Frame.__init __(self, parent)作用: 因为这里不是直接用对象调用函数,也不是一般意义的创建对象(例如后面的quitButton),而是初始化自身的一部分,因此需要传入self。
- 为什么不可以把class Frm(Frame)一句中的括号即其内容去掉:Frame.__init __(self, parent)初始化调用中可能使用了Frame类的方法和内部变量,如若删去则可能导致初始化失败。而把Frame作为父类则能继承它的方法和内部变量。
- 为什么不能调用两次Frame.__init __(self, parent):父类的初始化调用不是向self上添加成分,而是初始化自身的一部分,调用两次则会导致重复初始化,准确说不是不能是不应该。例:
class Cl(Frm):
def __init__(self):
Frm.__init__(self)
Frm.__init__(self)
初始化两次,导致运行时发现窗口上有两个按钮组件。从该例可以看到,重复初始化可能导致预料不到的后果。
虽然说CGI已经落伍了,但透过它你更容易了解网络的本质,所以我还是想记录一些关于CGI的内容
3
用python写CGI程序可能会遇到code 404, message No such CGI script ('/cgi-bin/totur0.py')
或是该程序不是CGI脚本之类等错误提醒,请使用:
python -m http.server --cgi 80
#当然端口自选,一般是80罢了
当我们使用localhost指向本地IP,通过URL在浏览器上访问某个页面,会带你到你执行该命令目录下的html或cgi脚本或是其他的文件。
4
当我们遇到不同的语言句法时会受到那些语言的保留字影响。
例如在CGI脚本中标准输出流会通过套接字将输出指向到chrome等浏览器,而在浏览器中的显示是由HTML语言控制的。我们想在网页中显示I want to print <
时,那么这句话时应该将其转义为I want to print &lt
,否则会在网页上显示为I want to print <
。我当时想用HTML中的“PRE”或是“CODE”标签来避免转义,结果我误会了这个标签的含义–它仅仅是对于空格或制表符等不再压缩成一个空格,对其它的还是会进行转义
下面是目前我所见到的一些转义工具:(待填坑…)
- HTML转义:
cgi.escape
与html.escape
(前者也可以用,不过似乎快要被废弃了,好像是因为官方将前者更名为后者。。。) - THML转义还原:
html.unescape
这个是真的没有cgi.escape了 - URL转义:
urllib.parse.quote
- URL转义还原:
urllib.parse.unquote
5
用CGI写脚本通常要在题头后面加一个换行符,即整个题头后面要加个空行,否则你访问那个页面时整个页面会显示空白。
一般而言你不加一下cookie题头等乱七八糟的那么整个题头就这么一句话:Content-type: text/html
总而言之,题头后面一定要加一个空行