首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对外部函数中的变量使用tkinter项

对外部函数中的变量使用tkinter项
EN

Stack Overflow用户
提问于 2015-12-11 14:17:19
回答 2查看 662关注 0票数 0

我试图将条目变量链接到Tkinter中的函数。我有16个条目/变量,我想在我的函数中使用。但是,我正在努力解决条目和变量赋值之间的接口问题。

我的代码:

代码语言:javascript
复制
import Tkinter 
import pandas as pd
import numpy as np

class simulation_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()

        c2_low =Tkinter.StringVar()
        c3_low =Tkinter.StringVar()
        ic4_low =Tkinter.StringVar()
        nc4_low =Tkinter.StringVar()
        ic5_low =Tkinter.StringVar()
        nc5_low =Tkinter.StringVar()
        neoc5_low =Tkinter.StringVar()
        n2_low = Tkinter.StringVar()

        c2_high =Tkinter.StringVar()
        c3_high =Tkinter.StringVar()
        ic4_high =Tkinter.StringVar()
        nc4_high =Tkinter.StringVar()
        ic5_high =Tkinter.StringVar()
        nc5_high =Tkinter.StringVar()
        neoc5_high=Tkinter.StringVar()
        n2_high = Tkinter.StringVar()


        self.entry = Tkinter.Entry(self, textvariable = c2_low).grid(column=0,row=1,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = c2_high).grid(column=0,row=2,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = c3_low).grid(column=0,row=3,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = c3_high).grid(column=0,row=4,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = ic4_low).grid(column=1,row=1,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = ic4_high).grid(column=1,row=2,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = nc4_low).grid(column=1,row=3,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = nc4_high).grid(column=1,row=4,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = ic5_low).grid(column=0,row=5,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = ic5_high).grid(column=0,row=6,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = nc5_low).grid(column=0,row=7,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = nc5_high).grid(column=0,row=8,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = neoc5_low).grid(column=1,row=5,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = neoc5_high).grid(column=1,row=6,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = n2_low).grid(column=1,row=7,sticky='EW')
        self.entry = Tkinter.Entry(self, textvariable = n2_high).grid(column=1,row=8,sticky='EW')
        self.resizable(False,False)

        self.resizable(False,False)

        button = Tkinter.Button(self,text=u"simulate")
        button.bind("<Button-1>", simulation)
        button.grid(column=3,row=9)

    def simulation(self):

        #code for this not included but uses all 16 entries/variable

if __name__ == "__main__":
    app = simulation_tk(None)
    app.title('Simulation')
    app.mainloop()

我希望输入的条目被赋值给一个变量,然后这个变量可以在一个单独的函数中使用(模拟)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-11 14:50:26

您可以通过调用框中的"textvariable“(如

代码语言:javascript
复制
c2_low.get()

因此,如果将这些变量更改为self.c2_low、self.c2_high等,则可以在模拟函数中调用它们,如下所示:

代码语言:javascript
复制
import Tkinter
import pandas as pd
import numpy as np

class simulation_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()
        self.grid()

    def initialize(self):
        self.c2_low =Tkinter.StringVar()
        self.entry = Tkinter.Entry(self, textvariable = self.c2_low).grid(column=0,row=1,sticky='EW')
        self.resizable(False,False)

        button = Tkinter.Button(self,text=u"simulate",command=self.simulation)
        button.grid(column=3,row=9)

    def simulation(self):
        print self.c2_low.get()
        #code for this not included but uses all 16 entries/variable

if __name__ == "__main__":
    app = simulation_tk(None)
    app.title('Simulation')
    app.mainloop()

请注意,我也更改了按钮,但现在如果您在条目中写入一些内容,然后按下按钮,它将被打印到控制台。从这里开始,您应该能够将它传递到一个变量中,或者对它做任何事情。

票数 1
EN

Stack Overflow用户

发布于 2015-12-11 15:16:10

我的建议是不要使用StringVar。这是没有必要的,显然是在增加你的困惑。这要求您稍微重构代码,但是重构将使您的代码更易于维护。

第一步是将小部件创建与小部件布局分开,并保存对每个小部件的引用。本质上,我们记住的是小部件,而不是变量。

代码语言:javascript
复制
def initialize(self):
    self.grid()

    self.c2_low = Tkinter.Entry(self)
    self.c2_high = Tkinter.Entry(self)
    ...
    self.cd_low.grid(column=0,row=1,sticky='EW')
    self.c2_high.grid(column=0,row=2,sticky='EW')
    ...
    self.resizable(False,False)

接下来,只需从simulation中的每个条目小部件中获取值。

代码语言:javascript
复制
def simulation(self):
    c2_low = self.c2_low.get()
    c2_high = self.c2_high.get()
    ...

注意,不管您是否使用StringVars,最后一部分都是相同的。在任何一种情况下,都可以使用.get()方法来获取值。使用此方法,您只需要管理一个对象(小部件),而不是两个对象(小部件和变量)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34225611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档