jjzjj

Python -Tkinter GUI更新多个模块

程序员大本营 2024-04-23 原文

在此先感谢您的任何帮助。

我有2个.py文件,一个运行GUI,另一个运行基本计算并使用GUI输入创建图形,然后将其输出到控制台。这些值是两次打印的,一次是从计算文件中,然后再次从GUI文件打印。

问题是,如果我更新输入,则输出不会更新,并且图也不会更新。预先感谢您对此提供任何帮助。

gui(test1gui.py):

import tkinter as tkfrom tkinter import ttkimport csvdef 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 pltimport numpy as np#--------------------------------------------------------------------------------------------------------------------------------# Getting variables from .csv import csvVariables = []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 xxf = getval('xf')Rmin = xf*2.5           # Multiplies xf by 2.5xl = 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 xif __name__ == '__main__':    print('Run GUI instead')        print('xf = ', xf)    print('Rmin = ', Rmin)

看答案

test1eqm.py仅在最初导入的CSV文件时才读取CSV文件。再次导入它不会导致执行任何代码,您只需获得对现有模块的另一个引用即可。基本上,当您希望执行计算时,您的所有代码都需要具有内部功能。

同样,在单个程序中,使用CSV文件将数据从一个模块传输到另一个模块是完全疯狂的。将数据作为参数传递!

有关Python -Tkinter GUI更新多个模块的更多相关文章

  1. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  6. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  7. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  8. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  9. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  10. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

随机推荐