当前位置: 首页 > 知识库问答 >
问题:

如何在python中跨文件使用tkinter小部件?

海嘉赐
2023-03-14

我对编程比较陌生,我注意到,随着代码的增长,在2个文件(设置和主文件)中对所有内容进行编码会变得非常混乱。然而,当我将代码拆分成许多文件时,我遇到了无法导入fileB的问题。py简介文件a。py并在我的文件B中使用文件A中的变量或小部件(我得到未定义的名称错误)。

我将tkinter用于UI,因此我的主文件是tk循环(main.py)。每个按钮都引用不同文件中的函数。它运行良好,直到我的函数包含按钮状态或输入文本。

这个例子是关于tkinter的,但是我在很多情况下遇到这个问题,因为我相信我的代码结构。

import FileB
import tkinter
from tkinter import Checkbutton, Tk, Entry, BooleanVar

root = Tk() # initialize blank window
root.geometry("500x500")

# text entry
E1 = Entry(root, bd=5, width = 8)
E1.grid(row=0, column=1)

# Checkbox
CB_var = BooleanVar()
CB = Checkbutton(root, text="Get text", variable=CB_var, command=FileB.get_text() )
CB.grid(row=0, column=2)

root.mainloop()
def get_text():
    if CB.var == True:
         entry_text = E1.get()
         E1.config(state=DISABLED)
         print(entry_text)
         E1.delete(0, END)
    elif CB.var == False:
         E1.config(state=NORMAL)
         print("Checkbox not selected")

由于E1是在调用我的函数之前定义的,我希望我的函数能够更改E1的状态,获取其文本并清空文本;好像这个功能是我的主要功能。皮耶。

实际输出是未定义的名称错误,因为E1不是我的文件B中的变量。

共有1个答案

蒋星雨
2023-03-14

由于FileBmain导入。pyFileB无法访问main中的对象。py。您需要在main中传递对象。py通过功能参数。

建议将您的小部件放入一个类中,并将该类的实例传递给FileB。get_text()函数。

文件A(main.py)

from tkinter import Checkbutton, Tk, Entry, BooleanVar
import FileB

class GUI:
    def __init__(self, root=None):
        # text entry
        self.E1 = Entry(root, bd=5, width = 8)
        self.E1.grid(row=0, column=1)
        # Checkbox
        self.CB_var = BooleanVar()
        self.CB = Checkbutton(root, text="Get text", variable=self.CB_var, command=lambda: FileB.get_text(self))
        self.CB.grid(row=0, column=2)

root = Tk() # initialize blank window
root.geometry("500x500")
GUI(root)
root.mainloop()

文件B(FileB.py)

from tkinter import DISABLED, NORMAL, END

def get_text(gui):
    if gui.CB_var.get() == True:
         entry_text = gui.E1.get()
         gui.E1.config(state=DISABLED)
         print(entry_text)
         gui.E1.delete(0, END)
    else:
         gui.E1.config(state=NORMAL)
         print("Checkbox not selected")
 类似资料:
  • 问题内容: 我想知道如何根据某些模式来更改某些单词和表达式的样式。 我正在使用小部件,但不确定如何执行此操作(与文本编辑器中语法高亮显示的想法相同)。即使这是用于此目的的正确小部件,我也不确定。 问题答案: 这是用于这些目的的正确小部件。基本概念是,将属性分配给标签,然后将标签应用于小部件中的文本范围。您可以使用文本小部件的命令来查找与您的模式匹配的字符串,这将为您返回足够的信息,将标记应用于匹配

  • 问题内容: 我正在尝试创建一个程序,该程序执行一系列给定的用户输入。仅在某些情况下才需要几个用户输入,并且如果可能的话,我想仅在选择一个Checkbutton(表示存在要求这些输入的情况)时显示这些输入值的Entry框和Labels。我不确定该怎么做: 将我要添加的标签和条目框放在已经存在的行之间。 取消选中“选择”按钮时,“隐藏”标签和输入框,而不进行选择,这样,如果重新选择“选择”按钮,则可以

  • 问题内容: 我想在小部件类绑定之后绑定自事件,以便在调用绑定函数时更改小部件的文本。例如,在文本窗口小部件中的内容更改之前,将调用我的绑定。 问题答案: 在您的情况下,发生的事情是您的打印值绑定发生在类绑定之前,而类绑定实际上是在接受用户输入并将其放入小部件中的。有几种方法可以解决此问题。您可以绑定而不是,或者可以使用内置的条目验证功能在每次按键时调用您的代码。使用该解决方案,您将获得所有需要的数

  • 问题内容: 我是Python的新手。我想创建一个以图像为背景的应用程序。但是,当我在图像上添加“标签”时,标签上会看到白色背景。我们是否可以将“标签”小部件的颜色设置为“透明”? 问题答案: 我不知道一种使Label背景透明的方法。一种选择是使用Canvas小部件作为整个对象的基础,然后使用该方法添加背景图像并创建文本标签。这将需要更多的工作,但是文本应该在图像顶部没有背景的情况下呈现。(诚​​然

  • 问题内容: 我正在使用 Python 和 Tkinter ,我需要知道小部件的当前尺寸(宽度,高度)。 我试过了,但是它只返回一个固定值,并且每当窗口小部件大小改变时(例如,调整窗口大小时)都不会更新。 问题答案: 使用和获取实际的窗口小部件大小,该属性只是给几何管理器的提示。

  • 问题内容: 我有一个要动态更改的小部件列表。 如何从窗口中删除小部件? 问题答案: 您可以调用以删除小部件(如果用于将其添加到窗口中)。 例: 如果使用,稍后可以再次显示该小部件,再次调用。如果您想永久删除它,请调用该小部件(这样您将无法重新添加它)。 如果你使用的方法,你可以使用或以 隐藏 的窗口小部件。