如何在pygubu中获取tkinter入口小部件的值?

问题描述:

我在pygubu中使用tkinter。我想我得到Entry_1小部件的价值。 Entry_1小部件值为蓝色。和Entry_1的textvariable是'text_1' 我读pygubu文件。但我不明白。请问谁能知道我容易。如何在pygubu中获取tkinter入口小部件的值?

和我链接ask.ui文件中使用pygubu http://www.joinsland114.mireene.com/data/ask.ui

try: 
    import tkinter as tk # for python 3 
except: 
    import Tkinter as tk # for python 2 
import pygubu 
from tkinter import * 

class Application: 
    def __init__(self, master): 

     #1: Create a builder 
     self.builder = builder = pygubu.Builder() 

     #2: Load an ui file 
     builder.add_from_file('ask.ui') 

     #3: Create the widget using a master as parent 
     self.mainwindow = builder.get_object('Frame_1', master) 

     builder.connect_callbacks(self) 


root = tk.Tk() 
app = Application(root) 

print(app.mainwindow.getvar('text_1'))  
root.mainloop() 

Traceback (most recent call last): File "C:\Python34\pygubu.py", line 25, in print(app.mainwindow.getvar('text_1')) File "C:\Python34\lib\tkinter__init__.py", line 454, in getvar return self.tk.getvar(name) _tkinter.TclError: can't read "text_1": no such variable

使用pygubu设计师打开你的ask.ui文件,然后展开Frame_2并点击Entry_1。在下面的部分中,在常规选项卡下,您将看到文本变量为空。在此字段中输入:entry1_var

对于ENTRY_2在textvariable字段中输入:entry2_var和Entry_3在textvariable字段中输入:entry3_var

要点击OK按钮打印以蓝色,黄色和绿色,那么3个变量值的控制台:选择Button_1,并在其命令字段中输入:button1_callback

在主菜单栏上,单击文件并保存ask.ui文件。

如果你现在通过ask.ui文件中的以下四大行已被添加到它的内容,看看周围...

<property name="textvariable">string:entry1_var</property> 
<property name="textvariable">string:entry2_var</property> 
<property name="textvariable">string:entry3_var</property> 
<property name="command">button1_callback</property> 

下面的方法现在被添加到问。 PY文件:

def button1_callback(self): 
    "Display the values of the 3 x Entry widget variables" 
    print(self.builder.tkvariables['entry1_var'].get()) 
    print(self.builder.tkvariables['entry2_var'].get()) 
    print(self.builder.tkvariables['entry3_var'].get()) 

    # Change Entry_3 from green to red 
    self.builder.tkvariables['entry3_var'].set("red")) 

也删除或注释掉#PRINT(app.mainwindow.getvar( '文本1'))

ask.py文件现在应该是这样的......

try: 
    import tkinter as tk # for python 3 
except: 
    import Tkinter as tk # for python 2 
import pygubu 
from tkinter import * 

class Application: 
    def __init__(self, master): 

     #1: Create a builder 
     self.builder = builder = pygubu.Builder() 

     #2: Load an ui file 
     builder.add_from_file('ask.ui') 

     #3: Create the widget using a master as parent 
     self.mainwindow = builder.get_object('Frame_1', master) 

     builder.connect_callbacks(self) 

    def button1_callback(self): 
     "Display the values of the 3 x Entry widget variables" 
     print(self.builder.tkvariables['entry1_var'].get()) 
     print(self.builder.tkvariables['entry2_var'].get()) 
     print(self.builder.tkvariables['entry3_var'].get()) 

     # Change Entry_3 from green to red 
     self.builder.tkvariables['entry3_var'].set("red") 

root = tk.Tk() 
app = Application(root) 

#print(app.mainwindow.getvar('text_1')) <-- This is commented out 
root.mainloop() 

运行Python程序,并单击确定按钮。控制台将显示:

$ python3 ask.py 
blue 
yellow 
green 

第三个条目小部件将显示绿色红色改变。