Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в python

YarinMinecraft YT Ученик (153), на голосовании 2 месяца назад
у меня есть код:
 import tkinter 
import time
from tkinter import *
from tkinter.messagebox import *
import random
global a
players = []
cplayer = ""
clicks = 0
def scount(pole, but, w):
global clicks
clicks += 1
if clicks == 1:
state = True
but['text'] = "Stop counting"
elif clicks == 2:
state = False
but['text'] = "Start counting"
clicks = 0
while state == True:
w.update()
time.sleep(0.05)
w.update()
pole.insert(END, "X")
w.update()
def start(but, d):
but.destroy()
cplayer = players[0]
player = Label(text=f"current player: {cplayer}")
player.pack()
c = Button(text="Start counting",command=lambda: scount(Xses, c, d))
c.pack()
Xses = Text()
Xses.pack(fill=BOTH, expand=1)

st = input("Write the name of player1: ")
st2 = input("Write the name of player2: ")
players.append(st)
players.append(st2)
tkinter.messagebox.showwarning(title="Current Players", message=f"Current Players: ", detail=f"{players}")
win = Tk()
win.geometry("500x500")
win.title("AutoCross v1.0b")
tkinter.messagebox.showerror(title="Debug Failed",message="Debug Failed!",detail="Failed to load module debug.findexploit()")
a = Button(text="Start game",command=lambda: start(a, win))
a.pack()
win.mainloop()
и при втором нажатии на кнопку в переменной c, у меня возникает ошибка:
 Exception in Tkinter callback 
Traceback (most recent call last):
File "/usr/lib64/python3.12/tkinter/__init__.py", line 1967, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/home/yar_developer/PycharmProjects/AutoCross/main.py", line 31, in
c = Button(text="Start counting",command=lambda: scount(Xses, c, d))
^^^^^^^^^^^^^^^^^^
File "/home/yar_developer/PycharmProjects/AutoCross/main.py", line 24, in scount
pole.insert(END, "X")
File "/usr/lib64/python3.12/tkinter/__init__.py", line 3831, in insert
self.tk.call((self._w, 'insert', index, chars) + args)
_tkinter.TclError: invalid command name ".!text"
Голосование за лучший ответ
Raспояс Обелискович Оракул (70715) 3 месяца назад
c = Button(text="Start counting",command=lambda: scount(Xses, c, d))

создается переменная "с" и сразу в лямде передаётся, я бы тоже матюгнулся =))

А вообще вот, что говорит ДжиПиТи:

https://chatgpt.com/share/d5a8d2aa-862e-438a-8787-e915fe83667b
YarinMinecraft YTУченик (153) 3 месяца назад
и что делать?
Raспояс Обелискович Оракул (70715) YarinMinecraft YT, объявить переменную до создания кнопки как в коде который написал Джипити
Захар Буров Ученик (126) 3 месяца назад
Неверно написана лямбда-функция. Правильное написание:

c = lambda Xsec, c_переназвать, d: Button(text="Start counting", command=scount(Xsec, c_переназвать, d))

Тем не менее, все равно, скорее всего не будет работать, так как лямбда-функция подразумевает то, что ее будут вызывать. Например:

button = c(Xsec=..., c_переназвать=..., d=...)
Sergio 2.1 Оракул (66258) 3 месяца назад
 import tkinter 
import time
from tkinter import *
from tkinter.messagebox import *
import random

players = []
cplayer = ""
clicks = 0
Xses = None

def count_loop(pole, w, state):
if state:
try:
w.update()
pole.insert(END, "X")
w.after(50, lambda: count_loop(pole, w, state))
except TclError:
pass # Прервать выполнение, если виджет больше не существует

def scount(pole, but, w):
global clicks, state
clicks += 1
if clicks == 1:
state = True
but['text'] = "Stop counting"
count_loop(pole, w, state)
elif clicks == 2:
state = False
but['text'] = "Start counting"
clicks = 0

def start(but, d):
global Xses
but.destroy()
cplayer = players[0]
player = Label(d, text=f"current player: {cplayer}")
player.pack()
c = Button(d, text="Start counting", command=lambda: scount(Xses, c, d))
c.pack()
if Xses is None:
Xses = Text(d)
Xses.pack(fill=BOTH, expand=1)

# Основная программа
st = input("Write the name of player1: ")
st2 = input("Write the name of player2: ")
players.append(st)
players.append(st2)

win = Tk()
win.geometry("500x500")
win.title("AutoCross v1.0b")

tkinter.messagebox.showwarning(title="Current Players", message="Current Players:", detail=f"{players}")
tkinter.messagebox.showerror(title="Debug Failed", message="Debug Failed!", detail="Failed to load module debug.findexploit()")

a = Button(win, text="Start game", command=lambda: start(a, win))
a.pack()

win.mainloop()
Похожие вопросы