我正在编写一个tkinter GUI(我的第一个),它是用来输入用户输入的数据。
无论如何,我正在做的方式如下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上的一些示例代码和其他一些我用Google搜索的地方,但他们似乎只是滚动背景而不是文本框本身。
有什么想法吗?
干杯
亚伦
答案 0 :(得分:1)
这是一个(合理的)简单的基于类的解决方案。该类是一个tkinter画布(允许滚动很好)。我使用canvas作为几何管理器,这样我就可以在任何地方放置条目小部件(使用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)
现在像以前一样做其他事情来设置滚动条,你应该全部设置。