Я использую Python 3.9.0 и сейчас делаю окно настроек для простой игры. в настройках вы можете выбрать сложность, и я хотел сделать возможность выбора пользовательской сложности, что просто означает ручной выбор осей X и Y в игре.
from tkinter import *
import tkinter.font as font
import tkinter.ttk as ttk
import tkinter as tk
settingsWin = tk.Tk()
settingsWin.title('Start Menu')
settingsWin.geometry("500x500")
settingsWin.resizable(0, 0)
back = tk.Frame(master=settingsWin,bg='white')
back.pack_propagate(0)
back.pack(fill=tk.BOTH, expand=1)
# General Font for general use
GeneralFont = font.Font(family='Helvetica', size=15)
# Label and Combobox for game Difficulty
difficulty_label = tk.Label(master=back, text='Game Difficulty:', font=GeneralFont, bg='white')
difficulty_label.place(x=60, y=120)
DIFFICULTY_OPTIONS = [
"Easy",
"Hard",
"Harder",
"Hardest",
"Custom"
]
difficulty_combobox = ttk.Combobox(master=back, state="readonly", values=DIFFICULTY_OPTIONS,font=GeneralFont, width=8)
difficulty_combobox.current(0)
difficulty_combobox.place(x=220, y=120)
# custom Difficulty in X and Y entries
def callback(input):
if input.isdigit():
if len(input) > 3:
print(input)
return False
else:
print(input)
return True
elif input is "":
print(input)
return True
else:
print(input)
return False
reg = settingsWin.register(callback)
X_label = tk.Label(master=back, text='X:', font=GeneralFont, bg='white')
X_label.place(x=60, y=185)
X_entry = tk.Entry(master=back, font=GeneralFont, bg='white', width=8)
X_entry.place(x=90, y=185)
X_entry.config(validate="key", validatecommand=(reg, '%P'))
Y_label = tk.Label(master=back, text='Y:', font=GeneralFont, bg='white')
Y_label.place(x=200, y=185)
Y_entry = tk.Entry(master=back, font=GeneralFont, bg='white', width=8)
Y_entry.place(x=230, y=185)
Y_entry.config(validate="key", validatecommand=(reg, '%P'))
Я хотел, чтобы X_entry и Y_entry имели state="normal" только тогда, когда вы выбираете Custom в сложности. Итак, я написал это:
if difficulty_combobox.get() != 4:
X_entry.config(state="disabled")
Y_entry.config(state="disabled")
else:
X_entry.config(state="normal")
Y_entry.config(state="normal")
Но это не работает, я предполагаю, что мне нужно, чтобы этот оператор If/Else возникал при изменении difficulty_combobox текущего значения? Если да, то как мне это сделать?
заранее спасибо!