tkinter_demo_003

import tkinter
import time
import random


class App(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.checkbutton_list = list()
        self.set_window()
        self.set_frame()
        self.set_widget()



    def set_window(self):
        self.title("Automation Kit")  # Set window title
        self.rowconfigure(index=0, weight=1)
        self.columnconfigure(index=0, weight=1)
        self.columnconfigure(index=1, weight=1)

    def set_frame(self):
        self.frame_left = tkinter.LabelFrame(master=self, text="Device Info")
        self.frame_left.grid(row=0, column=0, sticky=tkinter.NSEW)

        self.frame_right = tkinter.LabelFrame(master=self, text="Commands")
        self.frame_right.grid(row=0, column=1, sticky=tkinter.NSEW)

    def set_widget(self):
        # frame_left
        tkinter.Button(master=self.frame_left, text="refresh", command=self.generate_checkbutton).pack()
        self.generate_checkbutton()

        # frame_right
        tkinter.Button(master=self.frame_right, text="Reboot").pack()
        tkinter.Button(master=self.frame_right, text="Reset Factory").pack()

    def generate_checkbutton(self):
        # 销毁checkbutton
        for cb in self.checkbutton_list:  # type:tkinter.Checkbutton
            cb.destroy()
        self.checkbutton_list.clear()

        # 生成checkbutton
        for i in range(random.randint(5, 8)):
            text_checkbutton = tkinter.StringVar()
            text_checkbutton.set(time.strftime('%H:%M:%S'))
            checkbutton = tkinter.Checkbutton(master=self.frame_left, textvariable=text_checkbutton)
            checkbutton.pack()
            self.checkbutton_list.append(checkbutton)



if __name__ == "__main__":
    app = App()
    app.mainloop()

【优化】

  1. 可读性的改进:set_widget() 方法中,最好将每个按钮的创建和布局分开,这样可以更清晰地阅读和维护代码。

  2. 注释: 尽管你的代码已经很清晰,但在一些关键的地方添加注释可以帮助他人更容易地理解你的代码,特别是在一些复杂的部分或者涉及到特定逻辑的地方。

  3. 类型提示: 在 Python 3.6 及更高版本中,你可以使用类型提示,特别是在涉及到自定义对象的情况下,这样可以提高代码的可读性和可维护性。

  4. 异常处理: 虽然在这个小型应用中似乎不太需要,但是在真实的应用程序中,最好添加一些异常处理,以确保程序的稳定性。例如,如果 generate_checkbutton() 方法中的某些操作失败了,你可以考虑添加一些异常处理来处理这种情况。

下面是一个稍微改进过的版本,主要是将 set_widget() 方法中的按钮创建和布局分开,并添加了一些注释和类型提示:

import tkinter
import time
import random
from tkinter import Button, Checkbutton, LabelFrame, StringVar


class App(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.checkbutton_list = list()
        self.set_window()
        self.set_frame()
        self.set_widget()

    def set_window(self):
        self.title("Automation Kit")
        self.rowconfigure(index=0, weight=1)
        self.columnconfigure(index=0, weight=1)
        self.columnconfigure(index=1, weight=1)

    def set_frame(self):
        self.frame_left = LabelFrame(master=self, text="Device Info")
        self.frame_left.grid(row=0, column=0, sticky=tkinter.NSEW)

        self.frame_right = LabelFrame(master=self, text="Commands")
        self.frame_right.grid(row=0, column=1, sticky=tkinter.NSEW)

    def set_widget(self):
        self.create_refresh_button()
        self.layout_checkbuttons()

        Button(master=self.frame_right, text="Reboot").pack()
        Button(master=self.frame_right, text="Reset Factory").pack()

    def create_refresh_button(self):
        """
        创建刷新按钮,用于生成新的复选框
        """
        Button(master=self.frame_left, text="Refresh", command=self.layout_checkbuttons).pack()

    def layout_checkbuttons(self):
        """
        布局复选框
        """
        for cb in self.checkbutton_list:  # type:tkinter.Button
            cb.destroy()  # 清除原有布局
        self.checkbutton_list.clear()

        for i in range(random.randint(5, 8)):
            text_checkbutton = StringVar()
            text_checkbutton.set(time.strftime('%H:%M:%S'))
            checkbutton = Checkbutton(master=self.frame_left, textvariable=text_checkbutton)
            checkbutton.pack()
            self.checkbutton_list.append(checkbutton)



if __name__ == "__main__":
    app = App()
    app.mainloop()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值