【问题标题】:python - tkinter print from text box to screenpython - tkinter 从文本框打印到屏幕
【发布时间】:2017-10-21 18:04:48
【问题描述】:

在 tkinter 中,每次单击“单击”按钮时,我都会尝试将文本输入从文本框打印到屏幕

这是我运行良好的代码

from tkinter import *
def get(s):
        print(s.get())
win=Tk()
s=StringVar()
button=Button(win,text='click',command=lambda:get(s)).grid(row=1)
ent=Entry(win,textvariable=s).grid()

但是当我从新窗口执行相同操作时,它不起作用。 这是行不通的代码

from tkinter import *
def get(s):
        print(s.get())
def newwin():
    win=Tk()
    s=StringVar()
    button=Button(win,text='click',command=lambda:get(s)).grid(row=1)
    ent=Entry(win,textvariable=s).grid()
root=Tk()
but=Button(root,text='New',command=newwin).grid()

每次单击“单击”按钮时,我都会看到一个空白行... 但我想像前一个案例一样看到输出。 提前致谢!!

【问题讨论】:

    标签: python python-3.x tkinter tkinter-entry


    【解决方案1】:

    改变

    def newwin():
        win=Tk()
    ...
    

    def newwin():
        win=Toplevel(root)
        ...
    

    编辑(澄清):

    如果您更改,您的代码也会运行

     def newwin():
        win=Tk()
        s=StringVar()
        ...
    

    def newwin():
        win=Tk()
        s=StringVar(win)
        ...
    

    但您不应该运行多个 Tk() 实例。看好解释here

    编辑: 至于OP在评论中要求限制选择旧窗口,我建议在newwin()添加一行:

    def newwin():
        win=Tk(Toplevel(root))
        s=StringVar()
        button=Button(win,text='click',command=lambda:get(s)).grid(row=1)
        ent=Entry(win,textvariable=s).grid()
        win.grab_set() # win will catch all events, until you close it
                       # so user cannot interact with root window widgets
        # root.widthdraw() # alternative approach hides root window
                           # until Toplevel closes
    
    
    root=Tk()
    but=Button(root,text='New',command=newwin).grid()
    

    编辑: (通过代码重写进一步增强。我想我已经回答了 OP 问题,但是带有其他问题的 cmets 可能会造成混淆。请尝试一次提出一个问题,以便您为该问题选择最佳答案)

    现在我只是重写了这个东西,让它看起来像一个更连贯的答案。看这里使用gridpack 是不相关的。我希望你觉得它很有教育意义。注意不同的导入。您可以采用不同的方式导入,但这样您就不会导入所有 tkinter 模块名称。 ttk 小部件只是经典小部件的现代版本。我将Toplevel 子类化,确保父__init__ 被调用并将新窗口相关的东西放在该类中。还要注意grab_set 的使用和子顶层失去焦点时的事件回调。这样,除非您关闭孩子,否则根窗口永远不会重新获得焦点。所以没有窗口选择。这是改编自所选答案here

    还请注意,我没有保留对新创建窗口的任何引用。如果需要,您必须适应(也许将MyWinddow(root) 的结果存储在全局变量中)

    import tkinter as tk
    from tkinter import Tk, ttk
    
    class MyWindow(tk.Toplevel):
        def __init__(self, parent, *kw):
            super().__init__(parent, *kw)
            self.title('New Toplevel Window')
            self.myvar = tk.StringVar()
            self.button = ttk.Button(self, text='Print myvar',
                command=self.print_myvar)
            self.entry = ttk.Entry(self, textvariable=self.myvar)
            self.button.pack(pady=5)
            self.entry.pack(padx=50, pady=5)
            self.grab_set() # capture all the events
            self.bind('<FocusOut>', self.dont_let_focus_go) # cannot focus root
    
    
        def print_myvar(self):
            print(self.myvar.get())
    
        def dont_let_focus_go(self, event=None):
            self.focus_force()
    
    def new_window():
        MyWindow(root)
    
    root = Tk()
    root.title('My Application Root Window')
    
    button = ttk.Button(root, text='New Window', command=new_window)
    button.pack(padx=50, pady=5)
    
    root.mainloop()
    

    【讨论】:

    • 刚刚在上面的答案中添加了解释。
    • 如何限制选择旧窗口?直到我关闭新窗口(顶层)我应该无法选择旧窗口....我该怎么做??
    • win.grab_set() 添加为newwin() 方法中的最后一条指令。新窗口将捕获所有事件。
    • from tkinter import * def get(s): print(s.get()) def newwin(): win=Toplevel() s=StringVar() button=Button(win,text=' click',command=lambda:get(s)).grid(row=1) ent=Entry(win,textvariable=s).grid() win.grab_set() root=Tk() but=Button(root,text ='New',command=newwin).grid() 这就是你的意思吗??它没有用:(@progmatico
    • 这是你的意思吗??它不起作用:( from tkinter import * def get(s): print(s.get()) def newwin(): win=Toplevel() s=StringVar() button=Button(win,text='click ',command=lambda:get(s)).grid(row=1) ent=Entry(win,textvariable=s).grid() win.grab_set() root=Tk() but=Button(root,text= 'New',command=newwin).grid()
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多