python tkinter菜单刷新

标签 python python-3.x tkinter

我创建了一个使用 ssh 连接到我自制的 nas 的脚本,并在 中显示硬盘的大小、已使用和可用的硬盘。通过发送命令并打印来菜单:

import sys, paramiko
from tkinter import *
import os
import tkinter as tk

username = "user"
hostname = "ip"
password = "pass"
command = "df /dev/sda3 -h"
port = 22

try:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.WarningPolicy())
    client.connect(hostname, port=port, username=username, password=password)
    stdin, stdout, stderr = client.exec_command(command)
    output = stdout.read()
    root = Tk() 
    root.minsize(width=425, height=200)
    root.maxsize(width=425, height=200)
    root.configure(background='blue')
    menubar = Menu(root)
    root.title("NAS storage")
    msg = tk.Message(root, text = ("size", output[65:69], "used", output[72:75], "available", output[77:81])) #should output hdd info (size, used, avalable)
    msg.config(bg='lightgreen', font=('times', 50, 'italic'))
    msg.pack()
    tk.mainloop()
    root.config(menu=menubar)
    root.mainloop()
finally:
    client.close()

它可以工作,但我想每 5 秒刷新一次。

最佳答案

无需不断刷新菜单。您可以使用 postcommand 选项指定在菜单显示之前立即运行的命令。

这是一个人为的示例,它使用当前时间作为菜单上的一项。每次您显示菜单时,它都会显示一个新时间。

import tkinter as tk
import time

def updateTimeMenu():
    time_menu.delete(0, "end")
    time_menu.add_command(label=time.ctime())

root = tk.Tk()
root.geometry("400x200")

menubar = tk.Menu(root)
root.configure(menu=menubar)

time_menu = tk.Menu(menubar, postcommand=updateTimeMenu,
                       tearoff=False)
menubar.add_cascade(label="Time", menu=time_menu)

root.mainloop()

关于python tkinter菜单刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48796038/

相关文章:

Python D-Bus 和 Tkinter 主循环集成

python - ZeroDivisionError : 0. 0 的负数或复数幂

python - 如何使用 Selenium (python) 找到这个元素

python - 当单元格包含列表时, Pandas 适用

python - 按对计数/数据透视表

Python 3.5 urllib 无法在浏览器中打开网页

python - 模块中的函数将值传递给调用它的父模块

python - 如何移动 Tkinter 按钮?

python - 如何将具有空值的多个连续列插入python数据框

python-3.x - 你如何用 python3 读/写 TUN/TAP 接口(interface)?