【问题标题】:how can I getting tkinter entry widget value in pygubu?如何在 pygubu 中获取 tkinter 条目小部件值?
【发布时间】:2016-05-29 05:41:07
【问题描述】:

我在 pygubu 中使用 tkinter。我想获得 Entry_1 小部件的值。 Entry_1 小部件值为蓝色。 Entry_1 的文本变量是“text_1” 我阅读了 pygubu 文档。但我不明白。 谁能轻松认识我。

我链接 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(最近一次调用最后一次):文件“C:\Python34\pygubu.py”,行 25,在 print(app.mainwindow.getvar('text_1')) 文件“C:\Python34\lib\tkinter__init__.py”,第 454 行,在 getvar 返回 self.tk.getvar(name) _tkinter.TclError: can't read "text_1": no such variable

【问题讨论】:

    标签: python-3.x tkinter pygubu


    【解决方案1】:

    使用 pygubu-designer 打开您的 ask.ui 文件,然后展开 Frame_2 并单击 Entry_1。在下面的部分中,在 General 选项卡下,您将看到 textvariable 为空。在此字段中输入: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>
    

    现在将以下方法添加到 ask.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('text_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程序并点击OK按钮。控制台会显示:

    $ python3 ask.py
    blue
    yellow
    green
    

    第三个条目小部件将从显示 green 变为 red

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2022-12-08
      • 2019-09-27
      • 2018-09-15
      • 2023-03-05
      相关资源
      最近更新 更多