python传递变量tkinter

python传递变量tkinter,python,class,variables,tkinter,python-3.5,Python,Class,Variables,Tkinter,Python 3.5,我是新的im Python,刚刚开始学习类和tkinter,所以请原谅我的代码“凌乱”。 我试图在字段nr1中输入一些字符串,单击按钮后,在控制台中打印此字符串,并存储此值供以后使用: from tkinter import Tk, BOTH, RIGHT, RAISED, BOTTOM, TOP, X, StringVar from tkinter.ttk import Frame, Button, Entry class AD(Frame): def __init__(self,

我是新的im Python,刚刚开始学习类和tkinter,所以请原谅我的代码“凌乱”。 我试图在字段nr1中输入一些字符串,单击按钮后,在控制台中打印此字符串,并存储此值供以后使用:

from tkinter import Tk, BOTH, RIGHT, RAISED, BOTTOM, TOP, X, StringVar
from tkinter.ttk import Frame, Button, Entry


class AD(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, v=None, raw_input=None)
        self.parent = parent
        self.parent.geometry("250x150+300+300")
        self.parent.title("Trolollo")
        self.parent.resizable(False, False)
        self.inp = None
        self.v = StringVar()
        self.raw_input = None

        self.initUI()

    def user_input(self):
        global inp
        a = self.raw_input(self.v.get())
        inp = a
        return inp


    def initUI(self):
        self.pack(fill=BOTH, expand=True)

        frame = Frame(self, relief=RAISED, borderwidth=0)
        frame.pack(fill=BOTH, expand=True)

        self.entry1 = Entry(frame, textvariable=self.v)
        self.entry1.pack(side=TOP, fill=X, expand=False, padx=2, pady=2)
        self.entry1.focus_set()

        rename_button = Button(frame, text="Dispaly text", command =         self.user_input())
        rename_button.pack(side=TOP, expand=False, padx=2, pady=2)

        entry2 = Entry(frame)
        entry2.pack(side=TOP, fill=X, expand=False, padx=2, pady=2)


        quit_button = Button(self, text="Quit", command=self.quit)
        quit_button.pack(side=RIGHT, padx=5, pady=5)

        ok_button = Button(self, text="OK")
        ok_button.pack(side=RIGHT, padx=5, pady=5)


def main():
    root = Tk()


    app = AD(root)
    root.mainloop()


if __name__ == '__main__':
    main()
执行代码后,我得到: TypeError:“非类型”对象不可调用


如有任何帮助,将不胜感激。

问题:

  • 第一个问题是重命名按钮的选项“command=self.user\u input()”。你应该给函数命名 并且不执行该函数。放上()符号意味着你 在加载代码时执行函数,即执行一次 不按重命名按钮
  • 第二个问题是函数用户输入中的错误代码。这导致了您的错误消息
  • 回答:用建议的更正进行编码

    from tkinter import *
    from tkinter.ttk import *
    
    
    class AD(Frame):
        def __init__(self, parent):
            Frame.__init__(self, parent, v=None, raw_input=None)
            self.parent = parent
            self.parent.geometry("250x150+300+300")
            self.parent.title("Trolollo")
            self.parent.resizable(False, False)
            self.inp = None
            self.v = StringVar()
            self.raw_input = None
    
            self.initUI()
    
        def user_input(self):
            # Get entry1 value, store it as an attribute and print to console
            self.raw_input = self.v.get()
            print(self.raw_input)
    
    
        def initUI(self):
            self.frame = Frame(self, relief=RAISED, borderwidth=0)
            self.frame.pack(fill=BOTH, expand=True)
    
            self.entry1 = Entry(self.frame, textvariable=self.v)
            self.entry1.pack(side=TOP, fill=X, expand=False, padx=2, pady=2)
            self.entry1.focus_set()
    
    
            #self.rename_button = Button(self.frame, text="Dispaly text",
            #                            command = self.user_input())
            self.rename_button = Button(self.frame, text="Display text",
                                        command = self.user_input)
            self.rename_button.pack(side=TOP, expand=False, padx=2, pady=2)
    
    
            # You can remove the triple quotes to display these widgets 
            """
            self.entry2 = Entry(self.frame)
            self.entry2.pack(side=TOP, fill=X, expand=False, padx=2, pady=2)
    
    
            self.quit_button = Button(self.frame, text="Quit", command=self.quit)
            self.quit_button.pack(side=RIGHT, padx=5, pady=5)
    
            self.ok_button = Button(self.frame, text="OK")
            self.ok_button.pack(side=RIGHT, padx=5, pady=5)
    
            """
    
            self.pack(fill=BOTH, expand=True)
    
    
    def main():
        root = Tk()
    
    
        app = AD(root)
        root.mainloop()
    
    您的GUI:

    建议:

    • 一定要记得把自己放进去。在你的小部件前面
    • 一次测试一个小部件以帮助调试代码

    简而言之,
    command=self.user\u input()
    remove parantises。
    raw\u input
    None
    ,您试图在
    a=self.
    行中使用parantises调用它。不知道您在那里想要实现什么。您使用的是python 2还是python 3?您可以调用
    raw\u input()
    ,它是python 2,但是您可以导入
    tkinter
    ,而不是
    tkinter
    ,这意味着python 3。然后,您标记了问题python-3.5Python 3.5-是否存在对原始输入()的替换?。编辑:好,只需
    input()
    。Stll不知道这应该是什么样子这就是你如何使用Entry&Button从用户那里获取输入,然后按你喜欢的方式使用它。这正是我想要做的-非常感谢。我不确定我是否正确理解了所有内容(函数名上的()部分)。@Fangir欢迎。在空闲命令行上键入函数名时,python将创建一个函数对象。但是,当您键入函数名后跟()且名称和()之间没有空格时,您将看到python运行/执行您的函数(就像让函数对象完成它的工作一样)。我的2美分价值。。。