【发布时间】:2021-03-20 06:00:01
【问题描述】:
我正在编写一个计算器,它可以做很多事情,我想问一下如何在按下它时更改按钮状态。我正在使用以下代码:
import math, sqlite3
from tkinter import *
root = Tk()
x_are = Label(root)
x_are.grid(row=0, column=0)
x_are_ = Label(root)
x_are_.grid(row=0, column=0)
boo = True
bool_ = True
formula_entry = ''
def geometric_calc_press():
global bool_
def formula():
global bool_, state, formula_entry
if bool_:
formula_entry = Entry(geometric_calc, width=66)
formula_entry.grid(row=1, column=0, columnspan=1000)
bool_ = False
def show_searched_formula():
global formula_entry
x = formula_entry.get()
print(x)
def close():
global bool_, state, formula_entry, close, search_
bool_ = True
formula_entry.destroy()
close_.destroy()
search.destroy()
if not bool_:
close_ = Button(geometric_calc, text='Close', command=close, bg='black', fg='lime', highlightcolor="lime", highlightbackground="lime",
highlightthickness=2, relief=SOLID, default='active', padx=80, pady=20)
close_.grid(row=3, column=0)
search = Button(geometric_calc, text='Search', command=show_searched_formula, bg='black', fg='lime', highlightcolor="lime", highlightbackground="lime",
highlightthickness=2, relief=SOLID, default='active', padx=77, pady=20)
search.grid(row=2, column=0)
global root
root.destroy()
geometric_calc = Tk()
bindings = {
'<FocusIn>': {'default': 'active'},
'<FocusOut>': {'default': 'active'}
}
for k, v in bindings.items():
geometric_calc.bind_class('Button', k, lambda e, kwarg=v: e.widget.config(**kwarg))
geometric_calc.geometry('400x415')
geometric_calc.config(bg='black')
formula_finder = Button(geometric_calc, text='Formulas', bg='black', fg='lime', highlightcolor="lime",
highlightbackground="lime", highlightthickness=2, relief=SOLID, default='active', padx=70,
command=formula)
formula_finder.grid(row=0, column=0)
formula_user = Button(geometric_calc, text='Calculate', bg='black', fg='lime', highlightcolor="lime",
highlightbackground="lime", highlightthickness=2, relief=SOLID, default='active', padx=70)
formula_user.grid(row=0, column=2)
唯一相关的部分是geometric_calc_press 函数。我希望能够修复一个错误,如果多次按下公式按钮(关闭按钮然后需要按下相同的次数),关闭按钮不起作用。所以我想在按下时禁用公式按钮直到关闭按钮被按下。我真的不知道该怎么做,所以我在这里问。
【问题讨论】:
-
顺便说一句,我知道代码有点乱,但上周我真的不知道我的上课方式,就这样开始了。还不想改...
-
对于一个简单的问题,这有很多代码。请尝试将您的代码缩减为Minimal, Complete, and Verifiable example。
-
对不起,我编辑了,现在缩小了。
-
问题可能是因为您多次创建关闭按钮 - 您应该在开始时只创建一次而不显示它(没有
grid())并且只显示它(使用grid())按下@ 987654325@ - 以后你应该用grid_forget()隐藏它而不使用destroy() -
另一种方法是使用一些变量(
pressed_formula = True)来控制是否按下formula,下次跳过创建close button的代码。当你销毁close button然后重置这个变量(pressed_formula = False)
标签: python tkinter button widget