Я попробовал ваш код, и окно появится, если вы подождете несколько секунд. Это связано со следующим фрагментом кода:
command=nums.assignnewnums(a,b,questxt,ques,ans)
Это не то, что вы думаете. Вы думали о:
command=lambda: nums.assignnewnums(a, b, questxt, ques, ans)
То, как ваш код написан сейчас, не привязывает обратный вызов к кнопке, а скорее вызывает и выполняет функцию (поскольку вы вызываете ее явно), и пытается связать возвращаемое значение как обратный вызов, что не имеет смысла. В качестве побочного эффекта при вызове функции основной поток спит (поскольку assignnewnums
использует time.sleep
) на некоторое время, прежде чем вы достигнете root.mainloop
.
Каждый раз, когда вы связываете обратный вызов с кнопкой, вы хотите предоставить вызываемый объект - либо просто функциональный объект, либо, если аргументы критичны, лямбда-выражение или functools.partial
.