工具混合类框架代码执行有感而录——Python学习笔记之之十八
Gui这两章学得很艰难,涉及照片的部分好像一个代码都没有弄成。但单单图标的部分,还是给了人一点信心。快速来到第十章了,组建生成器没有费什么周折,很快就执行成功。那就继续前行吧,竟然一下子就来了个稍长的普通工具混合类的GUIMIXIN代码文件。不求完整理解,能够执行通过就是进步。短的代码容易一次成功,稍长的代码,则往往无意中出现很多错,你的纠错过程就在加深你对代码的理解。本篇笔记也就意在为guimixin文件的纠错,到最后做成来做一点记录,以留下点文字痕迹。
一、语言字符操作的一点喟叹
这一代成年人大抵都有用钢笔和用键盘的代际记忆,用钢笔只需要笔和纸,再加一张书桌就OK了。用键盘需要的东西那就多了,起码得有电脑,得有屏幕,得有操作平台。然后在操作平台上,再选择文字处理软件,也就是得要有一个把键盘动作转成文字的软件。要是只相信纸张的记载,还得有打印机把这些电子信息打出来。
不学计算机语言,只是使用操作平台的人,大都不过是把你构想的字符信息变成共享的东西。至如操作平台究竟如何运作,何以形成,一般人大概不会关注。即使关注,也是外行人看热闹,只求一般了解而已。
被python给磨到如今,想对编程有所知。如今才感悟到,这编程在对系统工具有所知之后,然后就得对编程的框架知识有所知。这个框架知识,既是引导编程者的导游,其实,也是使用电脑键盘来进行文字构思创作的作者们的导游。因为那用来编辑篇章的文字处理软件,一定得有框架,有引导使用者进入一个一个层面的窗口,这软件你才能操作。而这样的框架技能,好像就是GUI提供的。这真是见鬼了,GUI竟然成为我们熟悉软件,或者制作软件的导游。真还有点阴错阳差,学习python,竟然鬼使神差般地去与GUI打交道。
二、guimixin:一个混合类的普通框架工具软件纠错记录
这个代码打完之后,存放在D盘GUI下的一个Tools的目录之下,文件名为guimixin.py。在命令提示符下从C盘转到D盘,用python指令执行这个代码。这就出现第一个代码错误,一个语法错误。
1、syntax error
D:\>cd py39
D:\py39>cd gui
D:\py39\GUI>cd TOOLS
D:\py39\GUI\Tools>python guimixin.py
File "D:\py39\GUI\Tools\guimixin.py", line 67
def __init__(self, parent=None)
^
SyntaxError: invalid syntax
2、ModuleNotFoundError
这代码录入,自然会错误多多,第一次是67行的语法错误syntaxerror。这好纠错,改正之后,ps再出另外的错误,这就有字符在文首的错,模块未发现的错,其实也是文本给打错了。
D:\py39\GUI\Tools>python guimixin.py
Traceback (most recent call last):
File "D:\py39\GUI\Tools\guimixin.py", line 2, in <module>
from tkinter.massagebox import *
ModuleNotFoundError: No module named 'tkinter.massagebox'
一看就知是单词打错了,把e打成了a,纠正后,继续出同样的错。
3、ModuleNotFoundError
D:\py39\GUI\Tools>python guimixin.py
Traceback (most recent call last):
File "D:\py39\GUI\Tools\guimixin.py", line 4, in <module>
from py39.GUI.Tour.scrolledtext import Scrolledtext
ModuleNotFoundError: No module named 'py39'
这回就是有点麻烦的错了,我的目录原先是python39,嫌名长,改为py39。不会是改名造成的问题吧,这个还好处理。用两个名字都试试,如果全都不行,也许就是另外的问题了。这个另外的问题查找就多点麻烦,因为导入的模块是月初做的代码。你得回到目录中去查,把目录中的文件查出来,又解决了一个问题,新问题:导入错误,接之而来也。
4、ImportError:
D:\py39\GUI\Tools>python guimixin.py
python39 ScrolledText
Traceback (most recent call last):
File "D:\py39\GUI\Tools\guimixin.py", line 4, in <module>
from GUI.Tour.scrolledtext import Scrolledtext
ImportError: cannot import name 'Scrolledtext' from 'GUI.Tour.scrolledtext' (D:\py39\GUI\Tour\scrolledtext.py)
原来把导入的模块大小写写错,其实也是文本错愕的缘故,纠正了,依然出现问题。
5、ModuleNotFoundError
D:\py39\GUI\Tools>python guimixin.py
python39 ScrolledText
Traceback (most recent call last):
File "D:\py39\GUI\Tools\guimixin.py", line 5, in <module>
from lauchmodes import PortableLaucher, System
ModuleNotFoundError: No module named 'lauchmodes'
找这个 'lauchmodes’文件花了点功夫,但还是找到了,也是拼写错误,称作名称谬误。改正后还是没有消停,又出现我为了检查代码在文件中加上的mymain,后来忘了删除。
6、NameError
D:\py39\GUI\Tools>python guimixin.py
python39 ScrolledText
Traceback (most recent call last):
File "D:\py39\GUI\Tools\guimixin.py", line 63, in <module>
mymain
NameError: name 'mymain' is not defined
7、AttributeError
最后的错误很多,但容易纠正,纠错成功。
D:\py39\GUI\Tools>python guimixin.py
python39 ScrolledText
guimixin.py
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\py39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "D:\py39\GUI\Tools\guimixin.py", line 75, in other
self.spawn('guimixin.py')
File "D:\py39\GUI\Tools\guimixin.py", line 41, in spawn
PortableLaucher(pycmdline, pycmdline)()
File "D:\py39\GUI\Tour\launchmodes.py", line 16, in __call__
self.run(self.where)
File "D:\py39\GUI\Tour\launchmodes.py", line 52, in run
os.spawn(os.P_DETACH, pypath, (pyfile, cmdline))
AttributeError: module 'os' has no attribute 'spawn'
纠错后,代码正常运行。
三、纠错后正常运行的guimixin.py
1、纠错后的代码文件guimixin.py
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *
from GUI.Tour.scrolledtext import ScrolledText
from GUI.Tour.launchmodes import PortableLaucher, System
class GuiMixin:
def infobox(self, title, text, *arfs):
return showinfo(title, text)
def errorbox(self, text):
showerror('Error!', text)
def question(self, title, text, *arfs):
return askyesno(title, text)
def notdone(self):
showerror('Not implemented', 'Option not available')
def quit(self):
ans = self.question('Verify quit', 'Are you sure you want to quit?')
if ans:
Frame.quit(self)
def help(self):
self.infobox('RTFM', 'See figure 1...')
def selectOpenFile(self, file='', dir='.'):
return askopenfilename(initialdir=dir, initialfile=file)
def selectSaveFile(self, file='', dir='.'):
return asksaveasfilename(initialfile=file, initialdir=dir)
def clone(self, args=()):
new = Toplevel()
myclass = self.__class__
myclass(new, *args)
def spawn(self, pycmdline, wait=False):
if not wait:
PortableLaucher(pycmdline, pycmdline)()
else:
System(pycmdline, pycmdline)()
def browser(self, filename):
new = Toplevel()
view = ScrolledText(new, file=filename)
view.text.config(height=30, width=85)
view.text.config(font=('courier', 10, 'normal'))
new.title('Text Viewer')
new.iconname('browser')
"""
def browser(self, filename):
new = Toplevel()
text = ScrolledText(new, height=30, width=85)
text.config(font=('courier', 10, 'normal'))
text.pack(expand=YES, fill=BOTH)
new.title('Text Viewer')
new.iconname('browser')
text.insert('0.0', open(filename, 'r').read())
"""
if __name__=='__main__':
class TestMixin(GuiMixin, Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Button(self, text='quit', comman=self.quit).pack(fill=X)
Button(self, text='help', comman=self.help).pack(fill=X)
Button(self, text='clone', comman=self.clone).pack(fill=X)
Button(self, text='spawn', comman=self.other).pack(fill=X)
def other(self):
self.spawn('guimixin.py')
TestMixin().mainloop()
2、执行后的结果
结果1:显示图标
结果2:按动退出有询问
结果3:可以克隆无穷个
’