0

私はtkinterGUI(私の最初のもの)を書いています、そしてそれはユーザー入力からのデータを結合することです。

とにかく私がやっている方法は次のとおりです

from Tkinter import *
root = Tk()
textoutput = []
textbox = Entry(root, width = 5) 
textinput = []

x = 0 
offset = 0
yco = 40
press = 0 

textbox.pack()
textbox.place(x = 10, y = yco + offset) 

def addtextbox():
   global textinput, x, yco, offset, press, textbox

 offset = offset + 30
 txtinput = textbox.get()
 textinput.append(txtinput)

 textbox = Entry(root, width = 5)
 textbox.place(x = 10, y = yco + offset)



add = Button(root, text = "Add box", width = 10, command = addtextbox)    

add.pack()
add.place(x = 225, y = 5)

root.mainloop()

私が抱えている問題は、テキストボックスが多すぎて表示できず、スクロールバーが必要になると、特定のポイントに到達することです。effbot.orgやグーグルで検索した他の場所のサンプルコードを使用してみましたが、テキストボックス自体ではなく、背景をスクロールするだけのようです。

何か案は ?

乾杯

アーロン

4

1 に答える 1

1

これは(合理的に)単純なクラスベースのソリューションです。このクラスは tkinter キャンバスです (非常にうまくスクロールできます)。create_windowキャンバスをジオメトリ マネージャーとして使用して、(メソッドを使用して) 選択した場所にエントリ ウィジェットを配置できるようにします。

import Tkinter as tk    

class Manager(tk.Canvas):
    def __init__(self,master=None,**kwargs):
        tk.Canvas.__init__(self,master,**kwargs)
        self.widgets=[]

    def add_entry(self):
        entry = tk.Entry(self, width = 5)
        self.create_window(0,self._ypos(), anchor = tk.N+tk.W, window = entry)
        self.widgets.append(entry)

    def get_data(self):
        for w in self.widgets:
            print (w.get())

    def _ypos(self):
        return sum(x.winfo_reqheight() for x in self.widgets)

if __name__ == "__main__":
    root = tk.Tk()
    manager = Manager(root)
    manager.grid(row=0,column=0)
    scroll = tk.Scrollbar(root)
    scroll.grid(row=0,column=1,sticky=tk.N+tk.S)
    manager.config(yscrollcommand = scroll.set)
    scroll.config(command=manager.yview)
    b = tk.Button(root, text = "add entry", command = manager.add_entry)
    b.grid(row=1,column=0)
    b2 = tk.Button(root, text = "print stuff", command = manager.get_data)
    b2.grid(row=2,column=0)
    root.mainloop()

@BryanOakley による提案 (ありがとう!) (未テスト)

import Tkinter as tk    

class Manager(tk.Canvas):
    def __init__(self,master=None,**kwargs):
        tk.Canvas.__init__(self,master,**kwargs)
        self.frame = tk.Frame(self)
        self.create_window(0,0,anchor=tk.N+tk.W,window=self.frame)
        self.row = 0
        self.widgets = []

    def add_entry(self):
        entry = tk.Entry(self.frame)
        entry.grid(row = self.row,column = 0)
        self.row += 1
        self.widgets.append(entry)

スクロールバーを設定するために前と同じように他の作業を行ってください。これですべての設定が完了です。

于 2012-08-28T13:56:13.880 に答える