おかげさまで、ありがとうございました。Python - Tkinter GUIで複数のモジュールを更新
私は2つの.pyファイルを持っています.1つはGUIを実行し、もう1つは基本的な計算を行い、GUIの入力でグラフを作成し、コンソールに出力します。値は2回、計算ファイルから1回、GUIファイルからもう一度印刷されます。
問題は、入力を更新すると出力が更新されず、グラフも更新されないということです。これに関する助けをあらかじめありがとうございます。
GUI(test1GUI.py):
import tkinter as tk
from tkinter import ttk
import csv
def To_Print(self):
if len(self.e_xf.get()) != 0:
Write_Inputs_To_CSV(self)
import test1Eqm
test1Eqm.Pre_Output()
Rmin = test1Eqm.Outputs('Rmin')
xf = float(self.e_xf.get())/100
print('xf (fromGUI) = ', xf)
print('Rmin (fromGUI) = ', Rmin)
del test1Eqm
else:
print('Enter All Inputs')
def Write_Inputs_To_CSV(self):
xf = float(self.e_xf.get())/100
with open('TestInputs.csv', 'w', newline='') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
filewriter.writerow(['Variable', 'Value'])
filewriter.writerow(['xf', xf])
class ChemEngApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "ChemEng")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
##### Making Labels #####
self.l_Title = ttk.Label(self, text="Start Page")
self.l_Title.grid(row=0, columnspan = 2)
self.l_xf = ttk.Label(self, text="xA of Feed (%)")
self.l_xf.grid(row=1, sticky="e", padx=5)
##### Making Entry Boxes #####
self.e_xf = ttk.Entry(self)
self.e_xf.grid(row=1, column=1)
self.b_Run = ttk.Button(self, text="Click to Run", command=lambda: RUN(self))
self.b_Run.grid(row=2, column=0, columnspan = 2)
def RUN(self):
To_Print(self)
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
if __name__ == '__main__':
app = ChemEngApp()
app.mainloop()
計算(test1Eqm.py):は
import matplotlib.pyplot as plt
import numpy as np
#--------------------------------------------------------------------------------------------------------------------------------
# Getting variables from .csv
import csv
Variables = []
Values = []
def getval(x):
with open('TestInputs.csv', 'rt') as g:
reader = csv.reader(g)
# read file row by row
rowNr = 0
for row in reader:
# Skip the header row.
if rowNr >= 1:
#g.seek(0) <-- makes it freeze on start up
Variables.append(row[0])
Values.append(row[1])
# Increase the row number
rowNr = rowNr + 1
if x == 'xf':
x = float(Values[0])
return x
xf = getval('xf')
Rmin = xf*2.5 # Multiplies xf by 2.5
xl = np.linspace(0,1,2)
yl = [xf, Rmin]
def GUI_MT():
plt.plot(xl, yl, label='Test')
plt.xlabel('xA')
plt.ylabel('yA')
plt.xlim([0, 1])
plt.ylim([0, Rmin*1.5])
plt.legend()
plt.savefig('TestMT.png')
plt.show()
def Pre_Output():
print(' ')
print('New Run')
GUI_MT()
print('xf (fromEqm) = ', xf)
print('Rmin (fromEqm) = ', Rmin)
def Outputs(x):
a = Rmin
if x == 'Rmin':
x = a
return x
if __name__ == '__main__':
print('Run GUI instead')
print('xf = ', xf)
print('Rmin = ', Rmin)
これらのグローバル変数「値」と「変数」は避けるべきです。そして、あなたはいつも '' Values [0] ''にアクセスしています - その関数を再度実行すると決して別の結果を得ることはできません。 –
計算ファイルにアクセスしました。私が知っている.csvファイルを介して入力値にアクセスしました。私はそれを開いてその値を変更するので更新しています –
また、古い値を置き換えるように行0に戻ってきます –