telnet会话期间的Tkinter进度条

2024-06-25 22:43:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从tkinter gui通过telnetsession推送一些配置行。 简化;在我的GUI中有一个按钮。按下此按钮后,telnet会话开始(它从外部文件共享获取配置行)。 但目前还不是很好用,现在有办法判断它是否还在忙。我想通过弹出一个进度条来解决这个问题。你知道吗

我的主脚本包含了所有配置文件的获取、修改和发送到交换机的过程。 我有一个“独立”的脚本和弹出的进度条。 现在我想把这两个结合起来,但行不通。我读过关于多线程的文章,但是由于我是一个新的编程人员,如果我的情况需要的话,我需要一些帮助来理解它是如何工作的

主脚本:

#window stuff
window = Tk()
window.geometry('700x500')
window.title("Switchconfig generator")
window.lift()

def btntelnetclicked():
    try:
        telnet()
    except:
        messagebox.showinfo("Status", "Something went wrong, config was not pushed.")

#buttons

btntelnet= Button(window, text="Push config", command=btntelnetclicked)
btntelnet.grid(column=2, row=4, padx=10, pady=10) 

这当然只是一段代码

进度条

import threading

try: import tkinter
except ImportError:
    import Tkinter as tkinter
    import ttk
else: from tkinter import ttk

class GUI_Core(object):

    def __init__(self):
        self.root = tkinter.Tk()

        self.progbar = ttk.Progressbar(self.root)
        self.progbar.config(maximum=4, mode='indeterminate')
        self.progbar.pack()

        self.b_start = ttk.Button(self.root, text='Start')
        self.b_start['command'] = self.start_thread
        self.b_start.pack()

    def start_thread(self):
        self.b_start['state'] = 'disable'
        self.progbar.start()
        self.secondary_thread = threading.Thread(target=arbitrary)
        self.secondary_thread.start()
        self.root.after(50, self.check_thread)

    def check_thread(self):
        if self.secondary_thread.is_alive():
            self.root.after(50, self.check_thread)
        else:
            self.progbar.stop()
            self.b_start['state'] = 'normal'


def arbitrary():
    btntelnetclicked()


gui = GUI_Core()
gui.root.mainloop()

Tags: 进度条importself脚本tkinterdefguiroot