1

作成中のグラフィック インターフェイスにドロップダウン リストを配置しようとしています。

ドロップダウン リストの次のコードを見つけましたが、自分のコードに適応させることができません。

from Tkinter import *

def print_it(event):
    print var.get()

root = Tk()
var = StringVar()
var.set("a")
OptionMenu(root, var, "a","b","c", command=print_it).pack()
root.mainloop() 

これは私のコードです。これまでに行ったことは非常に簡単です。メニューが表示され、ユーザーが入力したいコンポーネントの数 (n) が尋ねられ、n 個の入力オプションが表示されます。上記のコードは、必要な数のコンポーネントを配置した後、「空白」のエントリを示しています。これらの 3 つの空白のエントリを 3 つのドロップダウン リストに置き換えたいと思います。

それらのドロップダウンリストを配置したいときにマークされています。

from Tkinter import *
import Image
import ImageTk
import tkFileDialog

class Planificador:
    def __init__(self,master):
        master.title("Planificador")
        self.frameOne = Frame(master)
        self.frameOne.grid(row=0,column=0)

        # Logo
        self.imgLabel = Label(self.frameOne, image = None)
        self.imgLabel.grid(row=0,column=0)
        self.img = ImageTk.PhotoImage(file = "logo.png")
        self.imgLabel["image"] = self.img

        self.botones()

    def botones(self):
        self.piezastext = Label(self.frameOne, text = " number of components ", justify="center")
        self.piezastext.grid(row=1, column=0)
        self.entrypiezas = Entry(self.frameOne,width=5)
        self.entrypiezas.grid(row=2, column=0)
        self.aceptarnumpiezas = Button(self.frameOne,text="Aceptar", command=self.aceptar_piezas,width=8)
        self.aceptarnumpiezas.grid(row=6, column=0)


    def aceptar_piezas(self):
        num_piezas = self.entrypiezas.get()
        print num_piezas

        self.piezastext.grid_remove()
        self.entrypiezas.grid_remove()
        self.aceptarnumpiezas.grid_remove()

        n = 1;
        while n <= int(num_piezas):
            self.textopieza = Label(self.frameOne, text = "Pieza", justify="left")
            self.textopieza.grid(row=n, column=0)

                    // INSTEAD THESE 'n' BLANK ENTRYS, I WANT TO PUT 'n' DROP DOWN LISTS
            self.entrypiezas = Entry(self.frameOne,width=5)
            self.entrypiezas.grid(row=n, column=1)

            self.aceptarpiezas = Button(self.frameOne,text="Aceptar",width=8)
            self.aceptarpiezas.grid(row=int(num_piezas)+1, column=0)

            n += 1


# Main
if __name__ == "__main__":
    # create interfacE
    root = Tk()
    movieApp = Planificador(root)
    root.mainloop()

frameOneしたがって、私の場合、フルウィンドウではなく、特定のフレームにそのドロップダウンリストを配置する方法を知りたいです。前もって感謝します。

4

1 に答える 1

2

aceptar_piezas私はあなたが望むと思うことをするためにあなたの関数を修正しました:

def aceptar_piezas(self):
    num_piezas = self.entrypiezas.get()
    print num_piezas

    self.piezastext.grid_remove()
    self.entrypiezas.grid_remove()
    self.aceptarnumpiezas.grid_remove()
    # Create a list of tuples to hold the dynamically created Optionmenus
    # The first item in the tuple is the menu, the second is its variable
    self.optionmenus = list()
    n = 1
    while n <= int(num_piezas):
        self.textopieza = Label(self.frameOne, text = "Pieza", justify="left")
        self.textopieza.grid(row=n, column=0)

        # Variable for the Optionmenu
        var = StringVar()
        # The menu
        menu = OptionMenu(self.frameOne, var, "a","b","c")
        menu.grid(row=n, column=1)
        # Set the variable to "a" as default
        var.set("a")
        # Add the menu to the list of Optionmenus
        self.optionmenus.append((menu, var))

        n += 1
    def clicked():
        """This function was made just to demonstrate.  It is hooked up to the button"""
        for optionmenu in self.optionmenus:
            print optionmenu[1].get()
        print self.optionmenus
    # This button doesn't need to be in the while loop
    self.aceptarpiezas = Button(self.frameOne, text="Aceptar", command=clicked, width=8)
    self.aceptarpiezas.grid(row=int(num_piezas)+1, column=0)

リスト内のタプルは、Optionmenu が作成された順序になっています。したがって、最初のタプルには最初の Optionmenu のデータが含まれ、2 番目のタプルには 2 番目のデータが含まれます。

于 2013-07-24T16:43:15.403 に答える