亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么它在python中分配之前顯示引用?

為什么它在python中分配之前顯示引用?

慕容708150 2022-09-20 15:52:00
誰能告訴我,在這個Python程序中我做錯了什么?我正在嘗試創建一個類似“畫圖”的應用程序,但它顯示錯誤。文件“E:\項目\新建文件夾\paint_new.py”,第 33 行,use_eraseractivate_button(eraser_button, eraser_mode=True)文件“E:\項目\新建文件夾\paint_new.py”,第 36 行,activate_buttonactive_button.config(relief=RAISED)未綁定本地錯誤:賦值前引用的局部變量“active_button”未定義名稱“eraser_on”from tkinter import *from tkinter.colorchooser import askcolorimport tkinter as tkDEFAULT_PEN_SIZE = 5.0DEFAULT_COLOR = 'black'def setup():    old_x = None    old_y = None    line_width = choose_size_button.get()    color = DEFAULT_COLOR    eraser_on = False    active_button = pen_button    c.bind('<B1-Motion>', paint)    c.bind('<ButtonRelease-1>', reset)def use_pen():    activate_button(pen_button)def use_brush():    activate_button(brush_button)def choose_color():    eraser_on = False    color = askcolor(color=color)[1]def use_eraser():    activate_button(eraser_button, eraser_mode=True)def activate_button(some_button, eraser_mode=False):    active_button.config(relief=RAISED)    some_button.config(relief=SUNKEN)    active_button = some_button    eraser_on = eraser_modedef paint(event):    line_width = choose_size_button.get()    paint_color = 'white' if eraser_on else color    if old_x and old_y:        c.create_line(old_x, old_y, event.x, event.y,                           width=line_width, fill=paint_color,                           capstyle=ROUND, smooth=TRUE, splinesteps=36)    old_x = event.x    old_y = event.ydef reset(event):    old_x, old_y = None, Noneroot = tk.Tk()pen_button = Button(root, text='pen', command=use_pen)pen_button.grid(row=0, column=0)brush_button = Button(root, text='brush', command=use_brush)brush_button.grid(row=0, column=1)color_button = Button(root, text='color', command=choose_color)color_button.grid(row=0, column=2)eraser_button = Button(root, text='eraser', command=use_eraser)eraser_button.grid(row=0, column=3)
查看完整描述

1 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

明智的解決方案是使用sth。喜歡這個:


from tkinter import *

from tkinter.colorchooser import askcolor

import tkinter as tk




DEFAULT_PEN_SIZE = 5.0

DEFAULT_COLOR = 'black'



class ABC:

    def setup(self):

        self.old_x = None

        self.old_y = None

        self.line_width = self.choose_size_button.get()

        self.color = DEFAULT_COLOR

        self.eraser_on = False

        self.active_button = self.pen_button

        self.c.bind('<B1-Motion>', self.paint)

        self.c.bind('<ButtonRelease-1>', self.reset)


    def use_pen(self):

        self.activate_button(self.pen_button)


    def use_brush(self):

        self.activate_button(self.brush_button)


    def choose_color(self):

        self.eraser_on = False

        self.color = askcolor(color=self.color)[1]


    def use_eraser(self):

        self.activate_button(self.eraser_button, eraser_mode=True)


    def activate_button(self, some_button, eraser_mode=False):

        self.active_button.config(relief=RAISED)

        some_button.config(relief=SUNKEN)

        self.active_button = some_button

        self.eraser_on = eraser_mode


    def paint(self, event):

        self.line_width = self.choose_size_button.get()

        self.paint_color = 'white' if self.eraser_on else self.color

        if self.old_x and self.old_y:

            self.c.create_line(self.old_x, self.old_y, event.x, event.y,

                               width=self.line_width, fill=self.paint_color,

                               capstyle=ROUND, smooth=TRUE, splinesteps=36)

        self.old_x = event.x

        self.old_y = event.y


    def reset(self, event):

        self.old_x, self.old_y = None, None

    def __init__(self):

        self.root = tk.Tk()


        self.pen_button = Button(self.root, text='pen', command=self.use_pen)

        self.pen_button.grid(row=0, column=0)


        self.brush_button = Button(self.root, text='brush', command=self.use_brush)

        self.brush_button.grid(row=0, column=1)


        self.color_button = Button(self.root, text='color', command=self.choose_color)

        self.color_button.grid(row=0, column=2)


        self.eraser_button = Button(self.root, text='eraser', command=self.use_eraser)

        self.eraser_button.grid(row=0, column=3)


        self.choose_size_button = Scale(self.root, from_=1, to=10, orient=HORIZONTAL)

        self.choose_size_button.grid(row=0, column=4)


        self.c = Canvas(self.root, bg='white', width=600, height=600)

        self.c.grid(row=1, columnspan=5)


        self.setup()

        self.root.mainloop()

ABC()


學習簡單的 OOP 原則!希望對您有所幫助!


查看完整回答
反對 回復 2022-09-20
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號