2023-简单点-tkinter中的ttk和tk

区别与优劣对比

在Tkinter中,ttk和tk的主要区别和优劣如下:

  1. 外观差异:tkinter模块使用操作系统的默认图形用户界面元素,因此它的外观取决于操作系统的主题风格。ttk是tkinter的升级版,它提供了更加现代化的外观,并支持样式的自定义。
  2. 组件差异:ttk包含了tkinter中没有的一些特殊组件,例如Combobox,Notebook,Progressbar,Separator,Sizegrip和TreeView等。这些组件增强了ttk的功能性和可用性。
  3. 兼容性:由于ttk是tkinter的扩展,因此它与tkinter完全兼容,可以在同一个程序中同时使用tkinter和ttk的组件。

在选择使用tkinter还是ttk时,可以考虑以下因素:

  1. 程序需求:如果程序需要使用特定的组件或需要更加现代化的外观,那么ttk可能是更好的选择。否则,如果只需要基本的GUI功能,那么tkinter可能就足够了。
  2. 开发环境:在不同的操作系统上,ttk的外观可能会有所不同。因此,在选择使用ttk时,需要考虑到目标用户使用的操作系统。
  3. 性能:虽然ttk提供了更多的功能和更好的外观,但它也可能比tkinter更加消耗资源。因此,在选择使用ttk时,需要考虑到程序的性能需求。

简单的camera app应用

用的gui是tkinter,
按钮是启动照相机拍摄图片3分钟。
语言是python。

import tkinter as tk  
import threading  
import time  
  
def start_camera():  
    print("Starting camera...")  
    time.sleep(180)  # 模拟摄像头拍摄3分钟  
    print("Camera stopped.")  
    root.event_generate("<<CameraStopped>>")  # 发送自定义事件,通知主线程摄像头已停止  
  
def on_camera_stopped(event):  
    entry.delete(0, tk.END)  # 清空输入框  
    button.config(state=tk.NORMAL)  # 重新启用按钮  
  
root = tk.Tk()  
root.title("Camera App")  
  
entry = tk.Entry(root)  
entry.pack()  
  
button = tk.Button(root, text="Start Camera", command=lambda: threading.Thread(target=start_camera).start())  
button.pack()  
  
root.bind("<<CameraStopped>>", on_camera_stopped)  # 绑定自定义事件到处理函数  
  
root.mainloop()

如何禁用按钮,重新启用按钮?

重新启用按钮是通过调用按钮的config方法并设置其state属性为tk.NORMAL来实现的。

在Tkinter中,按钮控件(Button)有一个state属性,用于控制按钮的状态。该属性可以设置为以下值之一:

  • tk.NORMAL: 按钮处于正常状态,可以被点击。
  • tk.DISABLED: 按钮被禁用,不能被点击。

当摄像头开始拍摄时,我们可以将按钮的状态设置为tk.DISABLED,使其变为灰色且不可点击,以避免在摄像头拍摄过程中多次点击按钮。这可以通过调用按钮的config方法并设置state属性来实现,例如:

button.config(state=tk.DISABLED)

一旦摄像头拍摄完成并触发了自定义事件<<CameraStopped>>,我们在事件处理函数on_camera_stopped中将按钮的状态重新设置为tk.NORMAL,使其变为可点击状态。这可以通过以下代码实现:

button.config(state=tk.NORMAL)

这样,当摄像头拍摄完成后,按钮就会重新启用,用户可以再次点击它来开始下一次拍摄。

相关推荐

  1. 2023-简单-tkinterttktk

    2023-12-05 15:28:05       58 阅读
  2. Tik Tok帳戶註冊海外動態IP作用

    2023-12-05 15:28:05       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 15:28:05       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 15:28:05       97 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 15:28:05       78 阅读
  4. Python语言-面向对象

    2023-12-05 15:28:05       88 阅读

热门阅读

  1. RabbitMQ避免重复消费

    2023-12-05 15:28:05       80 阅读
  2. 简谈PostgreSQL的wal_level=logic

    2023-12-05 15:28:05       53 阅读
  3. FlinkSql-Temporal Joins-Lookup Join

    2023-12-05 15:28:05       70 阅读
  4. postgresql树状结构查询示例

    2023-12-05 15:28:05       60 阅读
  5. 高级软件工程15本书籍

    2023-12-05 15:28:05       64 阅读
  6. flask 请求勾子实现 request_auth认证

    2023-12-05 15:28:05       64 阅读
  7. 第九章 Flask

    2023-12-05 15:28:05       59 阅读
  8. 关于运维工作和Linux的理解

    2023-12-05 15:28:05       55 阅读