如何查看哪个按钮被激活/确定python tkin上的正确按钮被激活

2024-04-24 03:10:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个游戏,找到七个正确的按钮(它有一个固定的答案)中的12个按钮使用tkinter。一共有12个按钮,只有全部点击7个按钮才能赢得游戏。你知道吗

我很好奇如何使窗口看到哪个按钮被激活或停用,以及如何使一个功能,以确定一个是赢还是输。(当七个特定的按钮被激活时,它获胜。)

++

game1=tkinter.Tk()
game1.title("Test")
game1.geometry("600x450")

button1 = Button(game1, text=' 1 ', fg='black', bg='red', 
                     height=3, width=10) 
button1.place(x=0,y=300)


button2 = Button(game1, text=' 2 ', fg='black', bg='red', 
                     height=3, width=10) 
button2.place(x=100,y=300)

game1.mainloop()

这是第一次在python上使用tkinter,所以实际上我在编写了这个非常基本的代码之后就停止了。你知道吗

玩家可以选择七个按钮,直到自己点击“完成”按钮。(单击该按钮后,玩家无法修改任何内容。)

一开始,我想如果我在点击右键的时候声明“num”和+=1,但是这个试验失败了,因为玩家可以选择激活还是停用,直到玩家自己点击“finish”按钮。所以我认为这段代码需要检查按钮的最终语句。你知道吗

有没有办法在tkinter上使用类似“if”的语句?(如果玩家选择了正确的七个按钮,则发现它们被激活-->;则玩家获胜。)


Tags: text游戏tkinter玩家placebuttonredwidth
1条回答
网友
1楼 · 发布于 2024-04-24 03:10:46

编辑-我已更新代码:

import tkinter as tk
import tkinter.ttk as ttk


class Application(tk.Tk):

    def __init__(self, *args, **kwargs):
        from random import sample

        tk.Tk.__init__(self, *args, **kwargs)
        self.title("Buttons")
        self.resizable(width=False, height=False)

        row_count = 3
        column_count = 4

        self.winning_buttons_count = 7
        assert 0 < self.winning_buttons_count <= row_count * column_count
        winning_buttons_numbers = sample(range(0, row_count * column_count), k=self.winning_buttons_count)

        self.selected_buttons_count = 0
        self.selected_button_color = "gray"
        self.correct_button_color = "green"
        self.incorrect_button_color = "red"
        self.missed_button_color = "orange"
        self.default_button_color = tk.Button().cget("bg")

        def on_press(button):
            color = button.cget("bg")
            if color == self.default_button_color and self.selected_buttons_count < self.winning_buttons_count:
                button.configure(bg=self.selected_button_color)
                button.configure(relief=tk.SUNKEN)
                self.selected_buttons_count += 1
            elif color == self.selected_button_color:
                button.configure(bg=self.default_button_color)
                button.configure(relief=tk.RAISED)
                self.selected_buttons_count -= 1

        def check_win():
            selected_winning_count = 0
            for button in self.buttons:
                is_selected = button.cget("bg") == self.selected_button_color and \
                              button.cget("relief") == tk.SUNKEN
                is_winning = button.number in winning_buttons_numbers

                if is_selected:
                    if is_winning:
                        button.configure(bg=self.correct_button_color)
                        selected_winning_count += 1
                    else:
                        button.configure(bg=self.incorrect_button_color)
                else:
                    if is_winning:
                        button.configure(bg=self.missed_button_color)

            if selected_winning_count == self.winning_buttons_count:
                self.finish_button.configure(text="You won!")
            else:
                self.finish_button.configure(text="Incorrect.")

        self.buttons = []

        for row in range(row_count):
            for column in range(column_count):
                button = tk.Button(self, text=" " * 8)
                button.grid(row=row, column=column)
                button.number = (row * column_count) + column
                button.configure(command=lambda b=button: on_press(b))
                self.buttons.append(button)

        vertical_line = ttk.Separator(self, orient=tk.VERTICAL)
        vertical_line.grid(row=0, column=column_count+1, rowspan=row_count, sticky="ns", padx=(8, 8))

        self.finish_button = tk.Button(self, text="Did I win?", command=check_win)
        self.finish_button.grid(row=row_count//2, column=column_count+2)

def main():

    application = Application()
    application.mainloop()

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

相关问题 更多 >