【问题标题】:How to call a function on Tkinter class?(not inside label)如何在 Tkinter 类上调用函数?(不在标签内)
【发布时间】:2014-01-21 12:02:38
【问题描述】:

我正在尝试使用一个放置在 Tkinder 类中的函数,但找不到该函数 (aktodec) 并出现错误。我不想将 def 称为按钮的命令,而是将其作为一个函数来为我的变量之一赋予价值

from Tkinter import *
class ADialog:
    def __init__(self, parent):
        top = self.top = Toplevel(parent)
        Label(top, text="Number to convert").pack()
        self.numb = Entry(top)
        self.numb.pack(padx=15)
        Label(top, text="Base of incered number").pack()
        self.base = Entry(top) 
        self.base.pack(padx=15)
        Label(top, text="Base you want to be converted").pack()
        self.basemet=Entry(top)
        self.basemet.pack(padx=15)
        b = Button(top, text="OK", command=self.met)
        b.pack(pady=5)
    def aktodec(self,num,base): #####commands
        dec=0
        num=num[::-1]        
        for i in range(len(num)):
            s=int(num1[i])*(int(base)**i)
            dec=dec+s        
    def met(self):
        num=self.numb=str(self.numb.get())
        base=self.base =int(self.base.get())
        basemet=self.basemet=int(self.basemet.get())
        if base==basemet:
            Label(root,text="The number "+self.numb+"is converted to"+self.numb) ##why can't be print??
        if base==10:
            new=num    
        else:
            new1=self.aktodec(num,base)           ####why aktodec doesn't give value to "new"?? 
        Label(root,text="Number is"+str(new))       
        self.top.destroy()

root = Tk()
def open_dialog():
    dial = ADialog(root)
    root.wait_window(dial.top)

root.wm_geometry("400x300+20+40")
message=StringVar()
message.set("Complete the form")
Label(root, textvariable=message).pack(padx=30)
root.update()
message.set("Form completed")
Button(root, text="Done", command=root.destroy).pack()
Button(root, text="new", command=open_dialog).pack()
root.update()
root.mainloop()

而且我的标签也有问题

Label(root,text="The number "+self.numb+"is converted to"+self.numb

即使是 base=basemet 也不会出现在根目录中(我不知道为什么)。请帮忙(这是本周的一个项目)!

【问题讨论】:

    标签: python python-2.7 tkinter function


    【解决方案1】:

    在 Python 中,函数不能修改调用者所感知的某些参数(整数、字符串),它们是不可变的。但是,列表等一些对象是可变的。

    def aktodec(self,num,base): 
        dec=0
        num=num[::-1]        
        for i in range(len(num)):
            s=int(num1[i])*(int(base)**i)
            dec=dec+s      
        return dec 
    def met(self):
        num=self.numb=str(self.numb.get())
        base=self.base =int(self.base.get())
        basemet=self.basemet=int(self.basemet.get())
        new = num
        if base==basemet:
            Label(root,text="The number "+self.numb+"is converted to"+self.numb).pack()
        if base==10:
            new=num    
        else:
            new=self.aktodec(num,base)          
        Label(root,text="Number is"+str(new)).pack()      
        self.top.destroy()
    

    【讨论】:

    • 那么我如何在 tinter 中运行函数“aktodec”?
    • @user3216984 您正确使用了该函数,但该函数需要额外的返回语句。检查我上面的代码。
    • thnx 的答案,但如果你可以通过运行程序看到标签: Label(root,text="The number "+self.numb+" is convert to "+self.numb).pack () 甚至不会打印 base==basemet
    • @user3216984 如果 base=basemet 我可以看到标签
    • 你是什么意思你看到标签..在根?你给“发生的基数”和“要转换的基数”的输入框相同的数字,你会看到根中的标签?
    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多