<p>至于强制选择,您可以在最外面的范围(与<code>root = tk.Tk()</code>处于同一级别)定义一个标志,以便您可以在函数中看到它是否设置为:</p>
<pre><code>isPredicted = False
</code></pre>
<p>至于在选中一个按钮时禁用每个按钮,您可以定义您的<code>start_func</code>,使其以按钮对象(<code>lotto_button</code>或<code>lotto_button1</code>)为参数:</p>
^{pr2}$
<p>要使用此函数,您需要按以下方式配置按钮,以便它们将自身作为参数传递:</p>
<pre><code>lotto_button.configure(command=lambda button_object=lotto_button: start_func(button_object))
lotto_button1.configure(command=lambda button_object=lotto_button1: start_func(button_object))
</code></pre>
<p>您的<code>stop_func</code>中也应该有<code>isPredicted</code>标志,以便它取消设置它:</p>
<pre><code>def stop_func():
global isPredicted
isPredicted = False
lotto_button.configure(relief=tk.RAISED, state=tk.ACTIVE)
lotto_button1.configure(relief=tk.RAISED, state=tk.ACTIVE)
</code></pre>
<p>至于您的<code>terminal</code>函数,您需要根据<code>isPredicted</code>的状态来操作,因此需要将其定义为:</p>
<pre><code>def terminal():
global isPredicted
if isPredicted:
now = new.get()
print(now)
else:
print("select predict button to proceed")
</code></pre>
<p>最后,在您的<code>"print number"</code>按钮中,您需要交换lambda中函数的顺序,否则<code>isPredicted</code>对于该按钮的命令而言始终为False:</p>
<pre><code>tk.Button(root, text="print number", command=lambda :[terminal(),
stop_func()]).place(x=150, y=300)
</code></pre>
<p>您的最终代码应该如下所示:</p>
<pre><code>import tkinter as tk
from tkinter import messagebox
def terminal():
global isPredicted
if isPredicted:
now = new.get()
print(now)
else:
print("select predict button to proceed")
def start_func(button_object):
global isPredicted
isPredicted = True
button_object.configure(relief=tk.SUNKEN, state=tk.DISABLED)
def stop_func():
global isPredicted
isPredicted = False
lotto_button.configure(relief=tk.RAISED, state=tk.ACTIVE)
lotto_button1.configure(relief=tk.RAISED, state=tk.ACTIVE)
root = tk.Tk()
root.geometry("400x400")
new = tk.StringVar()
en = tk.Entry(root, textvariable=new).pack()
isPredicted = False
lotto_button = tk.Button(root, text="predict one")
lotto_button.configure(command=lambda button_object=lotto_button: start_func(button_object))
lotto_button.pack(side="left")
lotto_button1 = tk.Button(root, text="predict two")
lotto_button1.configure(command=lambda button_object=lotto_button1: start_func(button_object))
lotto_button1.pack()
tk.Button(root, text="print number", command=lambda :[terminal(),
stop_func()]).place(x=150, y=300)
root.mainloop()
</code></pre>