会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132360个问题
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2402楼
Python 全系列/第二阶段:Python 深入与提高/文件处理 2407楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 2408楼

老师,你看这个是按照上面敲得,有按钮,但是按钮没反应,也不报错,这是怎么回事?

# 开发画笔软件
from tkinter.filedialog import *
from tkinter.colorchooser import *

win_width=900;win_height=450

class Application(Frame):
    def __init__(self,master=None,bg='#000000'):
        super().__init__(master)
        self.x = 0
        self.y = 0
        self.bg=bg
        self.fg='#ff0000'
        self.lastDraw=0
        self.starDrawFlag=False
        self.pack()
        self.createWidget()

    def createWidget(self):
        # 绘图区
        self.drawpad = Canvas(self,width=win_width,
                height=win_height*0.9,bg=self.bg)
        self.drawpad.pack()

        # 设定按钮
        btn_start=Button(self,text='开始',name='start')
        btn_start.pack(side='left',padx='10')
        btn_pen = Button(self, text='画笔', name='pen')
        btn_pen.pack(side='left', padx='10')
        btn_rect = Button(self, text='矩形', name='rect')
        btn_rect.pack(side='left', padx='10')
        btn_clear = Button(self, text='清屏', name='clear')
        btn_clear.pack(side='left', padx='10')
        btn_eraser = Button(self, text='橡皮擦', name='eraser')
        btn_eraser.pack(side='left', padx='10')
        btn_line = Button(self, text='直线', name='line')
        btn_line.pack(side='left', padx='10')
        btn_lineArrow = Button(self, text='箭头直线', name='lineArrow')
        btn_lineArrow.pack(side='left', padx='10')
        btn_color = Button(self, text='颜色', name='color')
        btn_color.pack(side='left', padx='10')

        # 事件处理
        btn_pen.bind_class('Button','<1>',self.eventManager)
        self.drawpad.bind('<ButtonRelease-1>',self.stopDraw)

        # 增加颜色切换的快捷键
        root.bind('<KeyPress-r>',self.kuaijiejian)
        root.bind('<KeyPress-g>', self.kuaijiejian)
        root.bind('<KeyPress-y>', self.kuaijiejian)

    def eventManager(self,event):
        name=event.widget.winfo_name()
        if name == 'line':
            self.drawpad.bind('<B1-Motion>',self.myline)
        elif name == 'lineArrow':
            self.drawpad.bind('<B1-Motion>',self.mylineArrow)
        elif name == 'rect':
            self.drawpad.bind('<B1-Motion>',self.myrect)
        elif name == 'pen':
            self.drawpad.bind('<B1-Motion>',self.mypen)
        elif name == 'eraser':
            self.drawpad.bind('<B1-Motion>',self.myeraser)
        elif name == 'clear':
            self.drawpad.delete('all')
        elif name == 'color':
            c = askcolor(color=self.fg,title='选择画笔颜色')
            self.fg=c[1]

    def stopDraw(self,event):
        self.startDrawFlag=False
        self.lastDraw=0

    def startDraw(self,event):
        self.drawpad.delete(self.lastDraw)
        if not self.startDrawFlag:
            self.starDrawFlag=True
            self.x=event.x
            self.y=event.y

    def myline(self,event):
        self.startDraw(event)
        self.lastDraw=self.drawpad.\
            create_line(self.x,self.y,event.x,event.y,fill=self.fg)

    def mylineArrow(self,event):
        self.startDraw(event)
        self.lastDraw=self.drawpad.create_line(self.x,self.y,
                    event.x,event.y,arrow=LAST,fill=self.fg)

    def myrect(self,event):
        self.startDraw(event)
        self.lastDraw=self.drawpad.create_rectangle(self.x,self.y,
                    event.x,event.y,outline=self.fg)

    def mypen(self,event):
        self.startDraw(event)
        self.drawpad.create_line(self.x,self.y,event.x,event.y,
                    fill=self.fg)
        self.x=event.x
        self.y=event.y

    def myeraser(self,event):
        self.startDraw(event)
        self.drawpad.create_rectangle(event.x-4,event.y-4,
                    event.x+4,event.y+4,fill=self.bg)
        self.x=event.x
        self.y=event.y

    def kuaijiejian(self,event):
        if event.char=='r':
            self.fg='#ff0000'
        elif event.char=='g':
            self.fg='#00ff00'
        elif event.char=='y':
            self.fg='#ffff00'

if __name__ == '__main__':
    root=Tk();root.geometry(str(win_width)+'x'+str(win_height)+'+200+300')
    root.title('百战程序员的画图软件')
    app=Application(master=root)
    root.mainloop()


Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 2410楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2412楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 2413楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 2414楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2415楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637