【问题标题】:Tkinter: Refresh a window (class-based) while closing anotherTkinter:在关闭另一个窗口时刷新一个窗口(基于类)
【发布时间】:2018-01-08 04:51:45
【问题描述】:

我有一个程序可以从 CSV 文件中读取和写入信息并将其显示在主窗口中。我可以打开一个单独的窗口来输入数据,当正确输入一些数据时它会关闭。这是一个简单的版本:

import tkinter as tk
import csv, os

class main(object):
    def __init__(self, master):
        with open('filename.csv', 'r') as f:
            #read data and display in main window
    def newwindow(self):
        #new window

class second_window(object):
    def __init__(self, master):
        #window stuff
    def data_writer(self):
        with open('filename.csv', 'r+') as f:
            #do stuff
            self.master.destroy()
root = tk.Tk()
app = main(root)
root.mainloop()

当输入数据时,它会更新 csv 文件并关闭第二个窗口,但主窗口显然没有刷新。我遇到了一些其他提供一些指示的线程,但没有一个适合我的情况,特别是因为这两个窗口是不同的类。如何使用更新的数据刷新主窗口?我可以在主窗口上调用self.master.destroy 并重新打开它,我该怎么做?任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 你的 with open 语句在类安装过程中只能发生一次。也许将 with open 语句移动到一个单独的方法,然后从第二个类调用该方法来更新主类。

标签: python class tkinter window refresh


【解决方案1】:

即使窗口关闭,您仍然可以访问第二类,包括实例对象。继续使用提供的伪代码:

class main(object):
    def __init__(self, master):
        self.master=master
        with open('filename.csv', 'r') as f:
            #read data and display in main window
        self.new_window()
        self.print_from_other_class()

    def new_window(self):
        #new window
        self.SW=second_window(self.master)

    def print_from_other_class(self):
        print self.SW.test_of_csv_field  ## or update Text, Label, etc.

class second_window(object):
    def __init__(self, master):
        #window stuff
    def data_writer(self):
        with open('filename.csv', 'r+') as f:
            #do stuff
            self.test_of_csv_field="yep, I'm, here"
            self.master.destroy()

【讨论】:

    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 2018-05-11
    • 2017-04-16
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多