tkinter 点击一个按钮后,另外的按钮自动失效
时间: 2023-06-16 16:08:32 浏览: 232
你可以在点击第一个按钮时,调用另外一个按钮的 `config` 方法来设置其状态为禁用(disabled),例如:
```python
import tkinter as tk
def button1_callback():
# do something
button2.config(state='disabled')
def button2_callback():
# do something
root = tk.Tk()
button1 = tk.Button(root, text='Button 1', command=button1_callback)
button1.pack()
button2 = tk.Button(root, text='Button 2', command=button2_callback)
button2.pack()
root.mainloop()
```
在 `button1_callback` 函数中,调用 `button2.config(state='disabled')` 将 `button2` 的状态设置为禁用。这样,当用户点击 `button1` 时,`button2` 就自动失效了。
相关问题
pythontkinter使按钮失效,如何使“停止"按钮终止其他按钮,函数已在Tkinter中运行(Python)
在Python的Tkinter库中,如果你想要创建一个可以控制其他功能的“停止”按钮,通常你会在主循环里处理按钮事件,并维护一些标志来指示是否应该继续执行。当你点击“停止”按钮时,你可以改变这个标志,然后退出循环,使得其他的按钮无法触发。
下面是一个简单的示例:
```python
import tkinter as tk
# 定义一个全局变量用于控制循环
stop_event = False
def start_button_clicked():
# 当开始按钮被点击时,设置标志为False,表示需要停止
global stop_event
stop_event = True
def stop_button_clicked():
# 当停止按钮被点击时,设置标志为True,表示需要停止
start_button["state"] = "disabled" # 将开始按钮设为不可点击
stop_event = True
root = tk.Tk()
start_button = tk.Button(root, text="开始", command=start_button_clicked)
stop_button = tk.Button(root, text="停止", command=stop_button_clicked)
start_button.pack()
stop_button.pack()
while not stop_event: # 主循环,在这个循环内执行你的任务
# 这里放你需要持续执行的代码...
pass
# 当stop_event变为True时,退出循环
root.quit() # 释放主窗口
root.destroy() # 销毁窗口
用python搭建一个界面,要求在界面内可以实现系统类型的选择(可修复系统或不可修复系统),界面内可以实现1到4个系统的可靠度计算,有系统的增加按钮,先进行系统类型选择后再输入对应系统的参数(可修复系统为MTBF和MTTR,不可修复系统为失效率α),再进行各个系统之间的连接方式的选择(如两个系统的话就是串联或并联,三个系统就是全部串联或全部并联或两串一并或两并一串。以此类推)最后可以在界面内求出最终连接完成系统的可靠度的
要实现这个界面有些复杂,需要用到Python的图形用户界面库Tkinter。以下是一个简单的例子,可以作为参考:
```python
import tkinter as tk
class System:
def __init__(self, mtbf, mttr, alpha):
self.mtbf = mtbf
self.mttr = mttr
self.alpha = alpha
def reliability(self, t):
if self.alpha is not None:
return pow(1 - self.alpha * t, t)
else:
return pow(self.mtbf / (self.mtbf + self.mttr), t / self.mtbf)
class SystemFrame(tk.Frame):
def __init__(self, parent, system_type):
super().__init__(parent)
self.system_type = system_type
self.entries = []
self.create_widgets()
def create_widgets(self):
if self.system_type == 'repairable':
tk.Label(self, text='MTBF:').grid(row=0, column=0)
tk.Label(self, text='MTTR:').grid(row=1, column=0)
self.entries.append(tk.Entry(self))
self.entries.append(tk.Entry(self))
self.entries[0].grid(row=0, column=1)
self.entries[1].grid(row=1, column=1)
else:
tk.Label(self, text='Failure rate:').grid(row=0, column=0)
self.entries.append(tk.Entry(self))
self.entries[0].grid(row=0, column=1)
def get_system(self):
if self.system_type == 'repairable':
return System(float(self.entries[0].get()), float(self.entries[1].get()), None)
else:
return System(None, None, float(self.entries[0].get()))
class ConnectionFrame(tk.Frame):
def __init__(self, parent, systems):
super().__init__(parent)
self.systems = systems
self.create_widgets()
def create_widgets(self):
self.connection_type = tk.StringVar(self)
self.connection_type.set('series')
tk.Radiobutton(self, text='Series', variable=self.connection_type, value='series').grid(row=0, column=0)
tk.Radiobutton(self, text='Parallel', variable=self.connection_type, value='parallel').grid(row=0, column=1)
def get_reliability(self, t):
if self.connection_type.get() == 'series':
return self.systems[0].reliability(t) * self.systems[1].reliability(t)
else:
return 1 - (1 - self.systems[0].reliability(t)) * (1 - self.systems[1].reliability(t))
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.system_frames = []
self.connections = []
self.create_widgets()
def create_widgets(self):
tk.Label(self, text='System type:').grid(row=0, column=0)
self.system_type = tk.StringVar(self)
self.system_type.set('repairable')
tk.OptionMenu(self, self.system_type, 'repairable', 'non-repairable', command=self.on_system_type_change).grid(row=0, column=1)
tk.Label(self, text='Time:').grid(row=1, column=0)
self.time_entry = tk.Entry(self)
self.time_entry.grid(row=1, column=1)
tk.Button(self, text='Calculate', command=self.calculate_reliability).grid(row=2, column=0, columnspan=2)
tk.Button(self, text='Add system', command=self.add_system_frame).grid(row=3, column=0, columnspan=2)
def on_system_type_change(self, value):
for frame in self.system_frames:
frame.destroy()
self.system_frames.clear()
self.connections.clear()
self.add_system_frame()
def add_system_frame(self):
frame = SystemFrame(self, self.system_type.get())
frame.grid(row=len(self.system_frames) + 4, column=0, columnspan=2)
self.system_frames.append(frame)
if len(self.system_frames) > 1:
frame = ConnectionFrame(self, [self.system_frames[-2].get_system(), self.system_frames[-1].get_system()])
frame.grid(row=len(self.system_frames) + 3, column=0, columnspan=2)
self.connections.append(frame)
def calculate_reliability(self):
t = float(self.time_entry.get())
reliability = 1
for i in range(len(self.system_frames)):
reliability *= self.system_frames[i].get_system().reliability(t)
if i < len(self.connections):
reliability = self.connections[i].get_reliability(t)
tk.Label(self, text=f'Reliability: {reliability:.2f}').grid(row=len(self.system_frames) + 5, column=0, columnspan=2)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
这个程序实现了以下功能:
- 可以选择系统类型(可修复或不可修复),并添加任意数量的系统。
- 可以选择系统之间的连接方式(串联或并联)。
- 可以输入时间并计算最终系统的可靠度。
如果需要实现更多功能,比如更多连接方式或更复杂的系统模型,需要进行相应的修改。
阅读全文