簡體   English   中英

如何在 python 中使用 Tkinter 使用 Python 中的 Tkinter,使用一些選定顏色的迭代來更改 python 中的圓圈顏色,每次按下按鈕都會改變顏色?

[英]How to change a circles color in python, using iteration of a few selected colors, which changes with each button press, using Tkinter in python?

我正在嘗試設計一個Mastermind游戲,但是我似乎無法找到一種方法來在定義后改變圓圈顏色,其中每次按下按鈕時它都會改變顏色,並遍歷給定的顏色列表。 我也在尋找一種方法將這些顏色存儲在一個列表中以供以后使用,並與正確的色環列表進行比較。

import Tkinter as tk
import Tkinter
import math
import random
from Tkinter import *

class ResizingCanvas(Canvas):
    def __init__(self,parent,**kwargs):
        Canvas.__init__(self,parent,**kwargs)
        self.bind("<Configure>", self.on_resize)
        self.height = self.winfo_reqheight()
        self.width = self.winfo_reqwidth()

    def on_resize(self,event):
        wscale = float(event.width)/self.width
        hscale = float(event.height)/self.height
        self.width = event.width
        self.height = event.height
        self.config(width=self.width, height=self.height)
        self.scale("all",0,0,wscale,hscale)

def main():

    root = Tk()

    myframe = Frame(root)
    myframe.pack(fill=BOTH, expand=YES)
    mycanvas = ResizingCanvas(myframe,width=300, height=425, highlightthickness=0)
    mycanvas.pack(fill=BOTH, expand=YES)


    root.title('MasterMind!')

    dash_seperation_line = mycanvas.create_line(195,350,195,35, dash =(3,5))

    top_line = mycanvas.create_line(0,35,300,35)

    blue_layer = mycanvas.create_rectangle(0,425,425,325,fill = 'blue')

    title_text = mycanvas.create_text(150,15,text='MasterMind!')

    colors = ['red','green','blue']


    #Trying to cycle through these given colors
    color_iteration = color=itertools.cycle(('blue', 'green', 'orange', 'red', 'yellow'))

    circles_list1 = []
    circles_list2 = []
    circles_list3 = []
    circles_list4 = []
    circles_list5 = []
    circles_list6 = []

    rectangles_list1 = []
    rectangles_list2 = []
    rectangles_list3 = []
    rectangles_list4 = []
    rectangles_list5 = []
    rectangles_list6 = []

    random_pick1 = random.choice(colors)
    random_pick2 = random.choice(colors)
    random_pick3= random.choice(colors)
    random_pick4 = random.choice(colors)

    answer_key = [random_pick4,random_pick3,random_pick2,random_pick1]

    r = 10
    x = 300
    y = 300

    #CIRCLES***
    for x in range(30,220,48):
        y = 50
        circle1 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        circles_list1.append(circle1)
    c1_1 =mycanvas.itemconfig(circles_list1[0])
    c2_1 =mycanvas.itemconfig(circles_list1[1])
    c3_1 =mycanvas.itemconfig(circles_list1[2])
    c4_1 =mycanvas.itemconfig(circles_list1[3])


    for x in range(30,220,48):
        y = 100
        circle2 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        circles_list2.append(circle2)
    c1_2 =mycanvas.itemconfig(circles_list2[0])
    c2_2 =mycanvas.itemconfig(circles_list2[1])
    c3_2 =mycanvas.itemconfig(circles_list2[2])
    c4_2 =mycanvas.itemconfig(circles_list2[3])

    for x in range(30,220,48):
        y = 150
        circle3 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        circles_list3.append(circle3)
    c1_3 =mycanvas.itemconfig(circles_list3[0])
    c2_3 =mycanvas.itemconfig(circles_list3[1])
    c3_3 =mycanvas.itemconfig(circles_list3[2])
    c4_3 =mycanvas.itemconfig(circles_list3[3])

    for x in range(30,220,48):
        y = 200
        circle4 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        circles_list4.append(circle4)
    c1_4 =mycanvas.itemconfig(circles_list4[0])
    c2_4 =mycanvas.itemconfig(circles_list4[1])
    c3_4 =mycanvas.itemconfig(circles_list4[2])
    c4_4 =mycanvas.itemconfig(circles_list4[3])

    for x in range(30,220,48):
        y = 250
        circle5 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        circles_list5.append(circle5)
    c1_5 =mycanvas.itemconfig(circles_list5[0])
    c2_5 =mycanvas.itemconfig(circles_list5[1])
    c3_5 =mycanvas.itemconfig(circles_list5[2])
    c4_5 =mycanvas.itemconfig(circles_list5[3])

    for x in range(30,220,48):
        y = 300
        circle6 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        circles_list6.append(circle6)
    c1_6 =mycanvas.itemconfig(circles_list6[0])
    c2_6 =mycanvas.itemconfig(circles_list6[1])
    c3_6 =mycanvas.itemconfig(circles_list6[2])
    c4_6 =mycanvas.itemconfig(circles_list6[3],fill = current_color)


    #RECTANGLES***
    for x in range(210,300,25):
        y = 50
        rectangle1 = mycanvas.create_rectangle(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        rectangles_list1.append(rectangle1)
    r1_1 =mycanvas.itemconfig(rectangles_list1[0])
    r2_1 =mycanvas.itemconfig(rectangles_list1[1])
    r3_1 =mycanvas.itemconfig(rectangles_list1[2])
    r4_1 =mycanvas.itemconfig(rectangles_list1[3])
    for x in range(210,300,25):
        y = 100
        rectangle2 = mycanvas.create_rectangle(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        rectangles_list2.append(rectangle2)
    r1_2 =mycanvas.itemconfig(rectangles_list2[0])
    r2_2 =mycanvas.itemconfig(rectangles_list2[1])
    r3_2 =mycanvas.itemconfig(rectangles_list2[2]) 
    r4_2 =mycanvas.itemconfig(rectangles_list2[3])  
    for x in range(210,300,25):
        y = 150
        rectangle3 = mycanvas.create_rectangle(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        rectangles_list3.append(rectangle3)
    r1_3 =mycanvas.itemconfig(rectangles_list3[0])
    r2_3 =mycanvas.itemconfig(rectangles_list3[1])
    r3_3 =mycanvas.itemconfig(rectangles_list3[2])
    r4_3 =mycanvas.itemconfig(rectangles_list3[3])
    for x in range(210,300,25):
        y = 200
        rectangle4 = mycanvas.create_rectangle(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        rectangles_list4.append(rectangle4)
    r1_4 =mycanvas.itemconfig(rectangles_list4[0])
    r2_4 =mycanvas.itemconfig(rectangles_list4[1])
    r3_4 =mycanvas.itemconfig(rectangles_list4[2])
    r4_4 =mycanvas.itemconfig(rectangles_list4[3])
    for x in range(210,300,25):
        y = 250
        rectangle5 = mycanvas.create_rectangle(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        rectangles_list5.append(rectangle5)
    r1_5 =mycanvas.itemconfig(rectangles_list5[0])
    r2_5 =mycanvas.itemconfig(rectangles_list5[1])
    r3_5 =mycanvas.itemconfig(rectangles_list5[2])
    r4_5 =mycanvas.itemconfig(rectangles_list5[3])
    for x in range(210,300,25):
        y = 300
        rectangle6 = mycanvas.create_rectangle(x-r, y-r, x+r, y+r, outline='#000000',fill='white')
        rectangles_list6.append(rectangle6)
    r1_6 =mycanvas.itemconfig(rectangles_list6[0])
    r2_6 =mycanvas.itemconfig(rectangles_list6[1])
    r3_6 =mycanvas.itemconfig(rectangles_list6[2])
    r4_6 =mycanvas.itemconfig(rectangles_list6[3])

    print(answer_key)




    enter_button = Button(root,text='Enter')

    B1 = Button(root,text='B1') # Use these buttons to change each column of circles
    B2 = Button(root,text='B2')
    B3 = Button(root,text='B3')
    B4 = Button(root,text='B4')

    enter_button.place(relx=1, x=-125, y=380, anchor=NE)

    B1.place(relx=1, x=-246, y=325, anchor=NE)
    B2.place(relx=1, x=-199, y=325, anchor=NE)
    B3.place(relx=1, x=-150, y=325, anchor=NE)
    B4.place(relx=1, x=-101, y=325, anchor=NE)


    mycanvas.addtag_all("all")
    root.mainloop()

if __name__ == "__main__":
    main()

使用next從迭代器中一一獲取項目:

>>> import itertools
>>> color_iteration = itertools.cycle(('blue', 'green', 'orange', 'red', 'yellow'))
>>> next(color_iteration)
'blue'
>>> next(color_iteration)
'green'
>>> next(color_iteration)
'orange'

circle1 = mycanvas.create_oval(x-r, y-r, x+r, y+r, outline='#000000',      
                               fill=next(color_iteration))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM