【问题标题】:How use event in other file?如何在其他文件中使用事件?
【发布时间】:2020-03-30 11:34:38
【问题描述】:

我准备了两个文件。首先是 GUI 类。第二个文件是一个脚本,我想在其中使用 GUI、数据库和模板类。数据库和模板类有效。我在其他脚本中检查它。

问题: 如何在脚本中使用事件(KeyRelase)表单 GUI 类?

第一:

from tkinter import *
from tkinter.font import Font
from tkinter.ttk import Separator


class GUI:

def __init__(self, master):
    self.ent_InventoryNumber = Entry(self.frm_FirstColumn, font=fontStyle, width=35, borderwidth=2, justify=CENTER)
    self.ent_InventoryNumber.insert(END, "Wprowadź TUTAJ numer inwentarzowy")
    self.ent_InventoryNumber.grid(row=2, column=0, columnspan=2, padx=5, pady=20, ipadx=2, ipady=2)
    self.ent_InventoryNumber.bind("<KeyRelease>", lambda x: self.searchChamber())


def searchChamber(self):
   return self.ent_InventoryNumber.get()

带有脚本的第二个文件:

import Databases as Db
import Template
from GUI import GUI

def test(a):
   print(a)

window = Tk()
myGUI = GUI(window)
window.mainloop()
# test(myGUI.searchChamber()) ???

【问题讨论】:

  • 首先你要明白Event-driven programming.bind(...定义在哪个文件或代码部分无关。
  • bind 可以执行函数但它不能使用从该函数返回的值 - 所以在这里使用 return 是没用的。最好使用print(self.ent_InventoryNumber.get()) 或将其分配给某个值 - 即。 self.value = self.ent_InventoryNumber.get() - 稍后使用。或者直接在searchChamber() 中使用这个值
  • PL: bind potrafi wywołać funkcję ale nie potrafi odebrać wartość zwracanej przez tą funkcję (nie ma do czego przypisać tej wartości) więc użycie @9877654331@ jest @bezuż654332. Musisz tę wartość przypisać do jakiejś zmiennej albo użyć od razu wewnątrz searchChamber.顺便说一句:十个山姆问题 będziesz miał gdy cały kod wrzucisz do jednego pliku - więc question nie jest jak użyć bind w drugim pliku ale jak w ogóle używać bind.
  • 顺便说一句:您的代码对我有用。您是否收到任何错误消息或什么?始终将完整的错误消息(从“Traceback”一词开始)作为文本(不是屏幕截图)提出问题(不是评论)。还有其他有用的信息。

标签: python tkinter tkinter-entry


【解决方案1】:

bind 在您的代码中正常工作。问题是bind 无法获得与return 一起使用的值 - 它无法将其分配给任何变量,您必须直接在searchChamber 中使用此值或分配给某个变量以供以后使用。

其他问题:当您关闭窗口时,tkinter 销毁所有小部件,您必须在某些变量中保留来自 Entry 的值

    def searchChamber(self):
        self.result = self.ent_InventoryNumber.get()

后来得到这个变量

    test(GUI.result)

在这个例子中,我使用print() 来查看bind 是否在每个按键后执行函数。我还使用类变量self.result 来保持值并在关闭窗口后使用它。

GUI.py

import tkinter as tk

class GUI:

    def __init__(self, master):
        self.result = '' # default value as start

        self.ent_InventoryNumber = tk.Entry(master)
        self.ent_InventoryNumber.insert('end', "Wprowadź TUTAJ numer inwentarzowy")
        self.ent_InventoryNumber.grid(row=2, column=0)
        self.ent_InventoryNumber.bind("<KeyRelease>", self.searchChamber)

    def searchChamber(self, event=None):
        self.result = self.ent_InventoryNumber.get()

        print('[DEBUG] searchChamber:', self.result)

main.py

import tkinter as tk
from GUI import GUI

window = tk.Tk()
myGUI = GUI(window)
window.mainloop()
print('result:', myGUI.result)

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2018-10-06
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多