复选框改变画布上对象颜色
我搞不清楚怎么让一个复选框在选中时填充对象的颜色。我知道我可以在创建对象的时候就设置好颜色,但不太确定怎么在之后用复选框来改变它们的颜色。
from tkinter import *
class box:
def __init__(self):
window = Tk()
window.title("Radiobuttons and Checkbuttons")
self.canvas = Canvas(window, width = 400, height = 100, bg = 'white')
self.canvas.pack()
frame = Frame(window)
frame.pack()
frame2 = Frame(window)
frame2.pack()
self.v1 = IntVar()
self.v2 = IntVar()
cbtFilled = Checkbutton(frame2,text= "Filled",variable = self.v2, command = self.processCheckButton).pack(side=RIGHT)
rbRect = Radiobutton(frame2, text = "Rectangle", variable = self.v1, value = 1, command = self.processRadiobutton).pack(side=LEFT)
rbOval = Radiobutton(frame2, text = "Oval", variable = self.v1, value = 2, command = self.processRadiobutton).pack(side = RIGHT)
def processCheckButton(self):
if self.v2.get() == 1:
print("Checked")
else:
print("unchecked")
def processRadiobutton(self):
if self.v1.get() == 1:
self.drawRectangle()
else:
self.drawOval()
def drawRectangle(self):
self.clearCanvas()
self.canvas.create_rectangle(35, 10 ,350,90,tags = 'rect')
def drawOval(self):
self.clearCanvas()
self.canvas.create_oval(50, 10, 350, 100, tags = 'oval')
def clearCanvas(self):
self.canvas.delete('rect','oval')
box()
2 个回答
0
从tkinter库中导入所有内容
定义一个叫做box的类:
在这个类里,有一个初始化的方法(init),这个方法会在你创建这个类的对象时自动运行。这个方法里做了以下几件事:
- 创建一个窗口,叫做window。
- 给这个窗口起个名字,叫“单选按钮和复选按钮”。
- 在窗口里创建一个框架(frame),用来放其他的组件。
- 把这个框架放到窗口里。
- 在框架里创建一个画布(canvas),宽400像素,高100像素,背景是白色的。
- 把这个画布放到框架里。
frame2 = Frame(window)
frame2.pack()
self.v1 = IntVar()
self.v2 = IntVar()
cbtFilled = Checkbutton(frame2,text= "Filled",variable = self.v2, command = self.processCheckButton).pack(side=RIGHT)
rbRect = Radiobutton(frame2, text = "Rectangle", variable = self.v1, value = 1, command = self.processRadiobutton).pack(side=LEFT)
rbOval = Radiobutton(frame2, text = "Oval", variable = self.v1, value = 2, command = self.processRadiobutton).pack(side = RIGHT)
def processCheckButton(self):
if self.v2.get() == 1:
self.clearCanvas()
if self.v1.get() == 1:
self.drawRectangle1()
elif self.v1.get()==2:
self.drawOval1()
# print("Checked")
else:
self.processRadiobutton()
#print("unchecked")
def processRadiobutton(self):
if self.v1.get() == 1:
self.drawRectangle()
else:
self.drawOval()
def drawRectangle(self):
self.clearCanvas()
self.canvas.create_rectangle(35, 10 ,350,90,tags = 'rect')
def drawOval(self):
self.clearCanvas()
self.canvas.create_oval(50, 10, 350, 100, tags = 'oval')
def clearCanvas(self):
self.canvas.delete('rect','oval')
def drawRectangle1(self):
self.clearCanvas()
self.canvas.create_rectangle(35, 10 ,350,90,fill = 'red',tags = 'rect')
def drawOval1(self):
self.clearCanvas()
self.canvas.create_oval(50, 10, 350, 100, fill= 'blue',tags = 'oval')
创建一个box类的对象。
0
通过把这些形状分配给变量,我可以使用itemconfigure()这个方法来改变它们。
self.item=self.canvas.create_oval(50, 10, 350, 100, tags = 'oval')
self.item=self.canvas.create_rectangle(35, 10 ,350,90,tags = 'rect')
def processCheckButton(self):
if self.v2.get() == 1:
self.canvas.itemconfigure(self.item,fill='black')
else:
self.canvas.itemconfigure(self.item,fill='white')