2017-08-01 11 views
0

CSVファイルから情報を読み書きし、メインウィンドウに表示するプログラムがあります。別のウィンドウを開いてデータを入力することができます。データが正しく入力されると終了します。ここでは、単純なバージョンです:データが入力されるとTkinter:別のウィンドウを閉じるときにウィンドウを更新する(クラスベース)

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ファイルを更新し、第二のウィンドウを閉じますが、メインウィンドウが明らかに更新されません。私はいくつかのポインタを与えるいくつかの他のスレッドに出くわしましたが、特に2つのウィンドウが異なるクラスであるため、私のケースではうまくいきません。更新されたデータでメインウィンドウを更新するにはどうすればよいですか?メインウィンドウでself.master.destroyに電話をかけて、再度開いてもよろしいですか?どんな助力も感謝しています。

+0

openステートメントは、クラスのインストール中に一度だけ発生します。たぶん、openステートメントを別のメソッドに移動し、そのメソッドを第2クラスから呼び出して、メインクラスを更新してください。 –

答えて

0

ウィンドウが閉じていても、インスタンスオブジェクトを含む2番目のクラスには引き続きアクセスできます。引き続き擬似コードが提供されます:

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() 
関連する問題