工具混合类框架代码执行有感而录——Python学习笔记之之十八

本文是作者在学习Python GUI过程中,针对guimixin.py代码执行遇到的问题及解决过程的记录。从语法错误到模块导入问题,逐一进行纠错,并最终成功运行代码,展示了对GUI框架理解的重要性。
摘要由CSDN通过智能技术生成

工具混合类框架代码执行有感而录——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:可以克隆无穷个
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值