tkinter_demo_upgrade

import tkinter as tk
from tkinter import filedialog
import sys
import threading
import random


class StdoutRedirector:
    def __init__(self, textbox):
        self.textbox = textbox

    def write(self, message):
        self.textbox.insert("end", message)

    def flush(self):
        pass


class DirectorySelectionApp:
    def __init__(self, master):
        self.master = master
        master.title("upgrade")

        # 创建一个Frame用于包裹所有组件
        self.frame = tk.Frame(master)
        self.frame.pack(padx=10, pady=5, fill="both", expand=True)

        # 创建左边的LabelFrame"设备信息"
        self.labelframe1 = tk.LabelFrame(self.frame, text="设备信息")
        self.labelframe1.pack(side="left", padx=10, pady=5, fill="both", expand=True)
        self.labelframe1.columnconfigure(index=0, weight=1)
        self.labelframe1.columnconfigure(index=1, weight=1)
        self.labelframe1.columnconfigure(index=2, weight=1)

        # 创建刷新按钮
        self.refresh_button = tk.Button(self.labelframe1, text="刷新", width=8, command=self.refresh_checkbuttons)
        self.refresh_button.grid(row=0, column=0, padx=5, pady=5, sticky="w")

        # 创建全选按钮
        self.select_all_button = tk.Button(self.labelframe1, text="全选", width=8, command=self.select_all_checkbuttons)
        self.select_all_button.grid(row=0, column=1, padx=5, pady=5, sticky="w")

        # 创建全不选按钮
        self.deselect_all_button = tk.Button(self.labelframe1, text="全不选", width=8,
                                             command=self.deselect_all_checkbuttons)
        self.deselect_all_button.grid(row=0, column=2, padx=5, pady=5, sticky="w")

        # 创建随机数量的Checkbutton
        self.checkbuttons = []
        self.refresh_checkbuttons()

        # 创建右边的LabelFrame"升级参数"
        self.labelframe2 = tk.LabelFrame(self.frame, text="升级参数")
        self.labelframe2.pack(side="left", padx=10, pady=5, fill="both", expand=True)
        # self.labelframe2.columnconfigure(index=0, weight=1)
        self.labelframe2.columnconfigure(index=1, weight=4)

        # 第一行:按钮和标签
        # 创建选择大包路径的按钮
        self.button_1 = tk.Button(self.labelframe2, text="大包路径", width=10, command=self.choose_directory)
        self.button_1.grid(row=0, column=0, padx=10, pady=5, sticky="w")

        # 创建选择root包路径的按钮
        self.button_2 = tk.Button(self.labelframe2, text="root包路径", width=10, command=self.choose_root_directory)
        self.button_2.grid(row=1, column=0, padx=10, pady=5, sticky="w")

        # 创建用于显示大包路径的标签,初始文本为"eg:d:\limages\odex"
        self.label_1 = tk.Label(self.labelframe2, text="eg:d:\\limages\\odex")
        self.label_1.grid(row=0, column=1, sticky="w")

        # 创建用于显示root包路径的标签,初始文本为"eg:d:\limages\root"
        self.root_label = tk.Label(self.labelframe2, text="eg:d:\\limages\\root")
        self.root_label.grid(row=1, column=1, sticky="w")

        # 创建升级按钮
        self.button_3 = tk.Button(self.labelframe2, text="升级", width=5, command=self.upgrade)
        self.button_3.grid(row=0, column=2, rowspan=2, padx=10, pady=5, sticky="nsew")

        # 创建文本框
        self.textbox = tk.Text(self.labelframe2)
        self.textbox.grid(row=2, column=0, columnspan=3, padx=10, pady=5, sticky="nsew")

        # 重定向控制台输出到文本框
        self.redirect_stdout_to_textbox()

    def choose_directory(self):
        """选择大包路径的函数"""
        threading.Thread(target=self.select_directory_worker).start()

    def choose_root_directory(self):
        """选择root包路径的函数"""
        threading.Thread(target=self.select_root_directory_worker).start()

    def select_directory_worker(self):
        directory_path = filedialog.askdirectory()
        if directory_path:
            self.label_1.config(text=directory_path)

    def select_root_directory_worker(self):
        directory_path = filedialog.askdirectory()
        if directory_path:
            self.root_label.config(text=directory_path)

    def redirect_stdout_to_textbox(self):
        """将控制台输出重定向到文本框的函数"""
        sys.stdout = StdoutRedirector(self.textbox)

    def refresh_checkbuttons(self):
        """刷新Checkbutton"""
        for cb in self.checkbuttons:
            cb.destroy()
        self.checkbuttons.clear()

        num_checkbuttons = random.randint(5, 8)
        for i in range(num_checkbuttons):
            cb = tk.Checkbutton(self.labelframe1, text=f"选项 {i + 1}")
            cb.grid(row=i + 1, column=0, columnspan=3, padx=5, pady=2, sticky="w")
            self.checkbuttons.append(cb)

    def select_all_checkbuttons(self):
        """全选Checkbutton"""
        for cb in self.checkbuttons:
            cb.select()

    def deselect_all_checkbuttons(self):
        """全不选Checkbutton"""
        for cb in self.checkbuttons:
            cb.deselect()

    def upgrade(self):
        print("开始升级")


root = tk.Tk()
app = DirectorySelectionApp(root)
root.mainloop()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值