【问题标题】:Python - Tkinter repeat function not working?Python - Tkinter 重复功能不起作用?
【发布时间】:2021-03-23 17:32:10
【问题描述】:

我正在尝试制作一个在随机位置制作一个圆圈的函数,作为回报,它第一次正确执行但之后每次我尝试执行它都不起作用。请帮助我,这是代码:

size = 200

class Spots():
    def __init__(self):
        self.avaible = True
    def taken(self):
        self.avaible = False

a1 = Spots()
a2 = Spots()
a3 = Spots()
b1 = Spots()
b2 = Spots()
b3 = Spots()
c1 = Spots()
c2 = Spots()
c3 = Spots()

spots = (a1,a2,a3,b1,b2,b3,c1,c2,c3)

import random as r
from tkinter import *
tk = Tk()
cv = Canvas(tk, width = 200 + size * 3, height = 200 + size * 3)
cv.pack()

def tkO():
    rch = r.choice(spots)
    x = 100
    y = 100
    
    while a1.avaible == True or a2.avaible == True or a3.avaible == True or b1.avaible == True or b2.avaible == True or b3.avaible == True or c1.avaible == True or c2.avaible == True or c3.avaible == True:
        while rch.avaible == False:
            rch = r.choice(spots)
        break
    rch.taken
    if "a" in str(rch):
        y = 100
        if "1" in str(rch):
            x = 100
        if "2" in str(rch):
            x = 100 + size
        if "3" in str(rch):
            x = 100 + size * 2
    if "b" in str(rch):
        y = 100 + size
        if "1" in str(rch):
            x = 100
        if "2" in str(rch):
            x = 100 + size
        if "3" in str(rch):
            x = 100 + size * 2
    if "c" in str(rch):
        y = 100 + size * 2
        if "1" in str(rch):
            x = 100
        if "2" in str(rch):
            x = 100 + size
        if "3" in str(rch):
            x = 100 + size * 2

    cv.create_oval(x,y,x+size,y+size)

任何帮助将不胜感激。此外,如果您能找到一种方法让 tkO() 函数中的混乱更高效(更短),那也会有所帮助。

【问题讨论】:

  • “不起作用”是什么意思?第二次有什么不同?你做了什么来调试它?您是否验证过该函数被多次调用?您是否检查过计算,看看它是否每次都计算不同的坐标?
  • 当我通过 Python Shell 执行它时,在 tk 中它什么也不做,我通过 Shell 调用该函数以查看是否一切正确,尽管它不是。我尝试了一些更改来修复一些错误,但最后我只有 1 个圆圈。
  • 你确定你只有一个圈子,还是有可能你正在创建多个相同的圈子?这对您来说似乎是一件容易的事情,只需几个放置良好的打印语句即可进行调试。
  • 有一点是肯定的,像 if "a" in str(rch) 这样的语句不会像你认为的那样做。您是否知道 str(rch) 将返回类似于 '<__main__.spots object at>' 的内容? “a”、“b”和“c”将始终在该字符串中?
  • 感谢您的帮助!我设法用一个全新的元组修复了绝对混乱,并将 rch 更改为 rchobject,而 rch 是字符串,它开始正常工作!太感谢了。没有你,我不可能做到这一点。

标签: python function tkinter


【解决方案1】:

功能已修复!我所要做的就是添加更多变量,使 rch 中带有 `if "(letter)" 的 if 语句成为字符串,而带有类对象 - 对象 (rchobject) 的 if 语句。

感谢 Bryan Oakley 帮助我解决这个问题!

import random as r

spots = (a1,a2,a3,b1,b2,b3,c1,c2,c3)
spotsStr = spots but with strings

def tkO():
 rn = r.randint(1,10)
 rch = spotsStr[rn]
 rchobject = spots[rn]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2023-03-09
    • 2018-09-24
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多