【问题标题】:How to enter a file name into your graphics window and then read that file and display the file in a graphics window using a file menu如何在图形窗口中输入文件名,然后读取该文件并使用文件菜单在图形窗口中显示该文件
【发布时间】:2021-09-30 19:52:47
【问题描述】:

我正在尝试在图形窗口中输入文件名,然后读取该文件并使用文件菜单在图形窗口中显示该文件。当我按下 new 时,会打开另一个窗口以询问名称并将其显示在主窗口中,但我无法打开新窗口并执行其余操作。我有 TopLevel 可以打开一个新窗口,但我得到 NameError: name 'TopLevel' is not defined 并且无法从那里继续。我该怎么做才能让它发挥作用?

from tkinter import Tk, Frame, Menu
from tkinter.ttk import *
from tkinter import filedialog as fd

class Example(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)   
        self.parent = parent        
        self.initUI()
        
    def initUI(self):
        self.parent.title("Simple menu")
        menubar = Menu(self.parent)
        self.parent.config(menu=menubar)
        
        fileMenu = Menu(menubar)
        fileMenu.add_command(label="New", command=self.onNew)
        menubar.add_cascade(label="File", menu=fileMenu)

    def onNew(self):
        print("do New")
        top = TopLevel()
        Label(self, text='Enter Your Name').grid(row=0)
        e1 = Entry(self)
        e1.grid(row=0, column=1)


def main():
    root = Tk()
    root.geometry("250x150+300+300")
    app = Example(root)
    root.mainloop()  

if __name__ == '__main__':
    main()  

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    问题只是你没有定义或导入任何名为Toplevel 的东西。您导入 tkinter 的方式使这个问题很容易解决。

    我的建议是删除这些陈述:

    from tkinter import Tk, Frame, Menu
    from tkinter.ttk import *
    

    ...并用这些替换它们:

    import tkinter as tk
    from tkinter import ttk
    

    从那时起,您几乎可以访问 tkinter 和 ttk 软件包中的所有内容。您只需为这些包中使用的所有内容添加 tk.ttk. 前缀。

    这将全局命名空间污染降至最低(即:您只需向全局命名空间添加两个名称),并使您的代码更具自我记录性。

    class Example(tk.Frame):
        def __init__(self, parent):
            ttk.Frame.__init__(self, parent)   
            self.parent = parent        
            self.initUI()
            
        def initUI(self):
            self.parent.title("Simple menu")
            menubar = tk.Menu(self.parent)
            self.parent.config(menu=menubar)
            
            fileMenu = tk.Menu(menubar)
            fileMenu.add_command(label="New", command=self.onNew)
            menubar.add_cascade(label="File", menu=fileMenu)
    
        def onNew(self):
            print("do New")
            top = tk.TopLevel()
            ttk.Label(self, text='Enter Your Name').grid(row=0)
            e1 = ttk.Entry(self)
            e1.grid(row=0, column=1)
    
    
    def main():
        root = tk.Tk()
        root.geometry("250x150+300+300")
        app = Example(root)
        root.mainloop()  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多