(python)带有用户生成的输入字段的tkinter滚动条
我正在编写一个TkinterGUI(我的第一个GUI),它用于从用户输入中收集数据 无论如何,我这样做的方式如下(python)带有用户生成的输入字段的tkinter滚动条,python,scroll,tkinter,Python,Scroll,Tkinter,我正在编写一个TkinterGUI(我的第一个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)
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和我在谷歌搜索过的其他地方的一些示例代码,但它们似乎只是滚动背景,而不是文本框本身
有什么想法吗
干杯
Aaron这里有一个(相当)简单的基于类的解决方案。该类是一个tkinter画布(它允许很好地滚动)。我将画布用作几何体管理器,以便可以将条目小部件放置在我选择的任何位置(使用create\u window
方法)
@BryanOakley建议(谢谢!)(未经测试)
现在像以前一样做其他事情来设置滚动条,您应该已经全部设置好了。我认为您的缩进使用addtextbox函数有点奇怪。您可以修复它吗?您也可以在画布中使用框架,然后在框架中打包或网格化条目小部件。@BryanOakley--谢谢。通过
tk.N+tk.W
锚定小部件可能比tk.N
然后调整位置要好。我已经更新了这两个帐户。感谢您的回复\,我似乎无法让它工作,它似乎显示了滚动条区域,但不允许您滚动区域。您需要配置画布的滚动区域
属性。它定义了应该由滚动条管理的虚拟画布区域@BryanOakley的更新似乎打破了滚动条。它的状态似乎没有得到更新。无论添加多少条目,它都将保持禁用状态。
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()
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)