【问题标题】:Creating popup using Return in pandastable在 pandastable 中使用 Return 创建弹出窗口
【发布时间】:2021-10-29 19:16:01
【问题描述】:

如何自定义包panastable,以便当我在显示屏中按Return 时,会弹出警告。我尝试将Return 绑定到函数callback,它应该创建messagebox。但什么也没有发生。在单元格中输入新内容并按Return 后,它应该会发出警告。这是我正在使用的代码:

import pandas as pd
from pandastable import Table
import tkinter as tk
from tkinter import messagebox

class MyTable(Table):

    def callback(self, event):
        messagebox.showinfo(title="Achtung", message="Achtung")

    def showWarning(self):
        self.bind('<Return>', self.callback)

top = tk.Tk()
top.geometry("300x1000")

df = pd.DataFrame()
df["column1"] = [1,2,3,4,5]

frame = tk.Frame(top)
frame.pack(fill="both", expand=True)

pt = MyTable(frame, dataframe=df)
pt.show()
pt.focus_set()
pt.showWarning()

button = tk.Button(top, text="Änderungen speichern", command=top.quit)
button.pack()

top.mainloop()

【问题讨论】:

  • 你从不调用showWarning,它应该如何将回车键绑定到任何东西?我建议你使用__init__方法中的绑定或至少调用pt.showWarning()在声明 pt 之后的某个时间点
  • 如何将其添加到__init__ 方法中?
  • 就像您使用任何其他方法一样,只需在类中定义它(也基于您似乎需要查看一些 OOP 教程),但同样没有必要,您目前真的只需要在调用 .mainloop 之前将 pt.showWarning() 放在某处,它应该可以工作
  • 不幸的是,添加 pt.showWarning() 并没有帮助。当我使用Return 时仍然没有任何反应
  • 键盘焦点是否设置在小部件上?

标签: python pandas tkinter


【解决方案1】:

所以这个 IMO 有一个更好的方法(因为使用继承的):

import pandas as pd
from pandastable import Table
import tkinter as tk
from tkinter import messagebox


class MyTable(Table):
    
    @staticmethod
    def show_info():
        messagebox.showwarning(title="Achtung", message="Achtung")

    def handleCellEntry(self, row, col):
        super().handleCellEntry(row, col)
        self.show_info()


root = tk.Tk()
root.geometry("300x1000")

df = pd.DataFrame()
df["column1"] = [1, 2, 3, 4, 6]

frame = tk.Frame(root)
frame.pack(fill="both", expand=True)

pt = MyTable(frame, dataframe=df)
pt.show()

button = tk.Button(root, text="Änderungen speichern", command=root.quit)
button.pack()

root.mainloop()

使用继承的方法handleCellEntry 在编辑条目时按下回车键时调用,这正是您所需要的。您可以在source code 中看到此方法如何绑定到'&lt;Return&gt;' 序列到该特定条目(因此只需覆盖它,调用超级方法(因此它会执行它应该做的事情)然后是您自己的方法(或反之亦然,但只有在您关闭对话框后才会更改条目))。

【讨论】:

    【解决方案2】:

    解决方案是绑定top window。下面的代码得到想要的结果:

    import pandas as pd
    from pandastable import Table
    import tkinter as tk
    from tkinter import messagebox
    
    top = tk.Tk()
    top.geometry("300x1000")
    
    df = pd.DataFrame()
    df["column1"] = [1,2,3,4,5]
    
    frame = tk.Frame(top)
    frame.pack(fill="both", expand=True)
    
    def callback(*args):
        messagebox.showinfo(title="Achtung", message="Achtung")
    
    top.bind('<Return>', callback)
    
    pt = Table(frame, dataframe=df)
    pt.show()
    
    
    button = tk.Button(top, text="Änderungen speichern", command=top.quit)
    button.pack()
    
    top.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      相关资源
      最近更新 更多