2017-04-23 162 views
1

我正在編寫一個繪圖程序,我試圖做出一個選項來更改畫布背景顏色,但由於某種原因它不起作用。沒有錯誤信息,我不知道爲什麼它不起作用,因爲我使用幾乎相同的代碼來更改線條顏色。Python tkinter窗口背景/畫布不改變顏色

P.S.我對python非常陌生。

代碼:

from tkinter import * 

# canvas specifications/variables 
canvas_height = 400 
canvas_width = 600 
p1_canvas_colour = "white" 
p1_canvas_colour_number = 1 

#p1 (what you draw with) specifications/variables 
p1_x = canvas_width/2 
p1_y = canvas_height 
p1_colour = "black" 
p1_colour_change = 1 
line_width = 1 
line_length = 1 

#p1 controls 
def p1_move_N(event): 
    global p1_y 
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y-line_length), width=line_width, fill=p1_colour) 
    p1_y = p1_y - line_length 

def p1_move_S(event): 
    global p1_y 
    canvas.create_line(p1_x, p1_y, p1_x, (p1_y+line_length), width=line_width, fill=p1_colour) 
    p1_y = p1_y + line_length 

def p1_move_E(event): 
    global p1_x 
    canvas.create_line(p1_x, p1_y, (p1_x+line_length), p1_y, width=line_width, fill=p1_colour) 
    p1_x = p1_x + line_length 

def p1_move_W(event): 
    global p1_x 
    canvas.create_line(p1_x, p1_y, (p1_x-line_length), p1_y, width=line_width, fill=p1_colour) 
    p1_x = p1_x - line_length 

def erase_all(event): 
    canvas.delete(ALL) 

#the p1 colour change 
def p1_line_colour_change(event): 
    global p1_colour 
    global p1_colour_change 
    p1_colour_change += 1 
    if p1_colour_change == 1: 
     p1_colour = ("black") 
    if p1_colour_change == 2: 
     p1_colour = ("white") 
    if p1_colour_change == 3: 
     p1_colour = ("red") 
    if p1_colour_change == 4: 
     p1_colour = ("orange") 
    if p1_colour_change == 5: 
     p1_colour = ("yellow") 
    if p1_colour_change == 6: 
     p1_colour = ("green") 
    if p1_colour_change == 7: 
     p1_colour = ("blue") 
    if p1_colour_change == 8: 
     p1_colour = ("purple") 
    if p1_colour_change == 9: 
     p1_colour = ("pink") 
    if p1_colour_change == 10: 
     p1_colour = ("brown") 
    if p1_colour_change == 11: 
     p1_colour_change = 1 
     p1_colour = ("black") 
#the canvas colour change 
def p1_canvas_colour_change(event): 
    global p1_canvas_colour 
    global p1_canvas_colour_number 
    p1_canvas_colour_number += 1 
    if p1_canvas_colour_number == 1: 
     p1_canvas_colour = ("white") 
    if p1_canvas_colour_number == 2: 
     p1_canvas_colour = ("black") 
    if p1_canvas_colour_number == 3: 
     p1_canvas_colour = ("red") 
    if p1_canvas_colour_number == 4: 
     p1_canvas_colour = ("orange") 
    if p1_canvas_colour_number == 5: 
     p1_canvas_colour = ("yellow") 
    if p1_canvas_colour_number == 6: 
     p1_canvas_colour = ("green") 
    if p1_canvas_colour_number == 7: 
     p1_canvas_colour = ("blue") 
    if p1_canvas_colour_number == 8: 
     p1_canvas_colour = ("purple") 
    if p1_canvas_colour_number == 9: 
     p1_canvas_colour = ("pink") 
    if p1_canvas_colour_number == 10: 
     p1_canvas_colour = ("brown") 
    if p1_canvas_colour_number == 11: 
     p1_canvas_colour_number = 1 
     p1_canvas_colour = ("white") 
#the window/canvas 
window = Tk() 
window.title("Drawing") 
canvas = Canvas(bg=p1_canvas_colour, height=canvas_height, width=canvas_width, highlightthickness=0) 
canvas.pack() 

#binding the functions to keys 
window.bind("<Up>", p1_move_N) 
window.bind("<Down>", p1_move_S) 
window.bind("<Left>", p1_move_W) 
window.bind("<Right>", p1_move_E) 
window.bind("<BackSpace>", erase_all) 
window.bind("<KP_Enter>", p1_line_colour_change) 
window.bind("<Shift_R>", p1_canvas_colour_change) 

window.mainloop() 

回答

2

你需要重新配置你的畫布,以應用更改, 在你的「p1_canvas_colour_change」方法的末尾添加下面一行:

canvas.configure(background=p1_canvas_colour) 
+0

謝謝,我給你最好的答案。 – BloodPanther