简体   繁体   English

StringVar()。get()不返回字符串

[英]StringVar().get() not returning string

I am trying to get the input of what page number the user wants. 我正在尝试输入用户想要的页码。 They should type in a number, and click the submit button. 他们应该输入数字,然后单击提交按钮。 To test it, I just want to print whatever they typed and then close the window. 为了测试它,我只想打印他们键入的内容,然后关闭窗口。 I've been following: http://effbot.org/tkinterbook/entry.htm as a guide, but I am stumped. 我一直在关注: http : //effbot.org/tkinterbook/entry.htm作为指南,但是我很困惑。

Why does 为什么

print(temp) 

not print out a number to console? 不能打印出要控制台的号码?

right now it prints out: 现在它打印出来:

<bound method IntVar.get of <tkinter.IntVar object at 0x000001FBC85353C8>>          

I've cleaned up the code a little bit: 我已经整理了一下代码:

import sys
from file import *
from page import *
from view import View
import tkinter as tk
from tkinter import *


class ViewGui:
def __init__(self):

    #Included in the class, but unrelated to the question:
    self._file = File("yankee.txt", 25)
    self.pages = self._file.paginate()
    self.initial_list = self.pages[0].readpage(self._file.fo)
    self.initial_string = ''.join(self.initial_list)


    # Create root
    self.root = Tk()
    self.root.wm_title("yankee.txt - page 1")
    # Create frame for buttons
    self.bframe = Frame(self.root)
    self.bframe.pack(side=BOTTOM, fill=X)
    self.tbutton = tk.Button(self.bframe, text="Top", command=lambda a="top": self.clicks(a)).pack(side=LEFT, expand=1, fill=X)
    self.bbutton = tk.Button(self.bframe, text="Bottom", command=lambda a="bottom": self.clicks(a)).pack(side=LEFT, expand=1, fill=X)
    self.ubutton = tk.Button(self.bframe, text="Up", command=lambda a="up": self.clicks(a)).pack(side=LEFT, expand=1, fill=X)
    self.dbutton = tk.Button(self.bframe, text="Down", command=lambda a="down": self.clicks(a)).pack(side=LEFT, expand=1, fill=X)
    self.pbutton = tk.Button(self.bframe, text="Page", command=lambda a="page": self.pageclicks()).pack(side=LEFT, expand=1, fill=X)
    self.qbutton = tk.Button(self.bframe, text="Quit", command=quit).pack(side=LEFT, expand=1, fill=X)
    # Create and pack Text
    self.T = Text(self.root, height=35, width=60, wrap=NONE)
    self.T.pack(side=TOP, fill=X)
    # Create and pack Scrollbar
    self.S = Scrollbar(self.root, orient=HORIZONTAL, command=self.T.xview)
    self.S.pack(side=BOTTOM, fill=X)
    # Attach Text to Scrollbar
    self.T.insert('1.0', self.initial_string)
    self.T.config(xscrollcommand=self.S.set, state=DISABLED)
    self.S.config(command=self.T.xview)

def pageclicks(self):
    print("pageClicks is getting called at least...")
    pop = Tk()
    pop.wm_title("Page Number")
    pop.label = Label(pop, text="Enter a Page Number:", width=35)
    pop.label.pack(side=TOP)
    pop.entrytext = IntVar()
    Entry(pop, textvariable=pop.entrytext).pack()
    pop.submitbuttontext = StringVar()
    Button(pop, text="Submit", command=lambda a=pop: self.submitted(a)).pack(side=LEFT, pady=5, padx=40)
    pop.cancelbuttontext = StringVar()
    Button(pop, text="Cancel", command=pop.destroy).pack(side=LEFT, pady=5, padx=40)

def submitted(self, a):
    print('submitted is getting called')
    temp = (a.entrytext.get)
    print(temp)

def clicks(self, a):
    print("you clicked clicks with the " + a)
    self.root.wm_title(self._file.filename + " - Page " + self._file.buttonHandler(a))

if __name__ == "__main__":
    vg = ViewGui()
    vg.root.mainloop()

When you create a new window you should not use Tk() , you must use tk.Toplevel() 创建新窗口时,不应使用Tk() ,而必须使用tk.Toplevel()

Must change: 必须更改:

pop = Tk()

to

pop = tk.Toplevel()

You should also use get() , not just get . 您还应该使用get() ,而不仅仅是get Must change: 必须更改:

temp = (a.entrytext.get)

to

temp = a.entrytext.get()

Code: 码:

def pageclicks(self):
        print("pageClicks is getting called at least...")
        pop = tk.Toplevel()
        pop.wm_title("Page Number")
        pop.label = Label(pop, text="Enter a Page Number:", width=35)
        pop.label.pack(side=TOP)
        pop.entrytext = IntVar()
        Entry(pop, textvariable=pop.entrytext).pack()
        pop.submitbuttontext = StringVar()
        Button(pop, text="Submit", command=lambda a=pop: self.submitted(a)).pack(side=LEFT, pady=5, padx=40)
        pop.cancelbuttontext = StringVar()
        Button(pop, text="Cancel", command=pop.destroy).pack(side=LEFT, pady=5, padx=40)

def submitted(self, a):
    print('submitted is getting called')
    temp = a.entrytext.get()
    print(temp)

Made changes to these two methods and now it is working. 对这两种方法进行了更改,现在可以使用了。

def pageclicks(self):
    print("pageClicks is getting called at least...")
    pop = Tk()
    pop.wm_title("Page Number")
    pop.label = Label(pop, text="Enter a Page Number:", width=35)
    pop.label.pack(side=TOP)
    pop._entry = Entry(pop)
    pop._entry.pack()
    pop._entry.focus_set()
    Button(pop, text="Submit", command=lambda a=pop: self.submitted(a)).pack(side=LEFT, pady=5, padx=40)
    Button(pop, text="Cancel", command=pop.destroy).pack(side=LEFT, pady=5, padx=40)

def submitted(self, _pop):
    temp = _pop._entry.get()
    print(temp)
    _pop.destroy()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM