0

Tkinter を使用して LabelFrame クラスの作成に取り組んでいます。これは、追加ボタンを押して、その項目をさらに作成する関数を呼び出すことにより、1 つずつ含めたい項目のグループの周りにラッパーを作成します。

LabelFrame と addbuttun を確認できるコードを実行しています。しかし、呼び出されている関数のボタンを押すと、エラーが発生します。

addmeter() takes exactly 1 argument (0 given)

LabelFrame 内にクラスを追加するには、この関数が必要ですが、ここで立ち往生しています。

以下にコードをリストしました。

from Tkinter import *

    root = Tk()
    root.title("LabelFrame with embedded add voltmeters")
    root.geometry("600x200+400+400")


    def addmeter(self):
            #Create frame for the voltmeter
        voltsmet1 = LabelFrame(self.master, text = "Volts")
            #add Text box for the serial output. 
        voltinfo = Text(voltsmet1, bg="BLACK",  height=10, width =20 )
            #add in reg command to find our data from queue and display it



            #packs the widgets on the grid for display
        voltsmet1.pack(side=LEFT, expand=True)
        voltinfo.pack(side=LEFT,  expand=True)      

    class wrapper(LabelFrame):
        def __init__(self,master):
            self.master = master
            self.create_wrapper()

        def create_wrapper(self):
            wrapper = LabelFrame(self.master, text = "Volt Meters")
            add_button = Button(wrapper, text="add", command=addmeter)
            wrapper.pack()
            add_button.pack()

    new= wrapper(root)
    root.mainloop()
4

1 に答える 1

2

使用lambda機能:

add_button = Button(wrapper, text="add", command=lambda:addmeter(self))

編集:

これのことですか?

ここに画像の説明を入力

wrapperラムダ関数で使用します

add_button = Button(wrapper, text="add", command=lambda:addmeter(wrapper))

そして私は削除.masterしますaddmeter

完全なコード:

from Tkinter import *

root = Tk()
root.title("LabelFrame with embedded add voltmeters")
root.geometry("600x200+400+400")


def addmeter(parent):
        #Create frame for the voltmeter
    voltsmet1 = LabelFrame(parent, text = "Volts")
        #add Text box for the serial output. 
    voltinfo = Text(voltsmet1, bg="BLACK",  height=10, width =20 )
        #add in reg command to find our data from queue and display it



        #packs the widgets on the grid for display
    voltsmet1.pack(side=LEFT, expand=True)
    voltinfo.pack(side=LEFT,  expand=True)      

class wrapper(LabelFrame):
    def __init__(self,master):
        self.master = master
        self.create_wrapper()

    def create_wrapper(self):
        wrapper = LabelFrame(self.master, text = "Volt Meters")
        add_button = Button(wrapper, text="add", command=lambda:addmeter(wrapper))
        wrapper.pack()
        add_button.pack()

new= wrapper(root)
root.mainloop()

ところで: 名前selfparentinに変更しaddmeter()て、名前をより論理的にします。

于 2013-11-14T02:30:51.957 に答える