问题描述
我已经将100行嵌入2列中.每一行都在一个帧内,并且全部包装在文本小部件中.我正在尝试添加滚动条,但仅滚动文字,而列则不会移动.
frame_fields = tk.Text(self.window) frame_fields.pack_propagate(0) tf = {} text_labels = tk.Text(frame_fields) text_labels.pack(side='left', expand='yes', fill='both') scrollbar = tk.Scrollbar(frame_fields) scrollbar.config(command=text_labels.yview) scrollbar.pack(side='right', fill='y') text_labels.config(yscrollcommand=scrollbar.set) for f in range(100): tf[f] = tk.Frame(text_labels) e_find = tk.Entry(tf[f]) e_replace = tk.Entry(tf[f]) e_find.pack(side='left') e_replace.pack(side='left') tf[f].pack() frame_fields.pack()
我应该如何更改此代码,所以text_labels滚动?
解决方案
下面的代码创建可滚动单元格:
def create_cells(self): """Create cells for exception text""" # ---------------------------------------------- frame_fieldsscroll = tk.Text(self.main, relief='flat') text_fields = tk.Text(frame_fieldsscroll, relief='flat') frame_fieldsscroll.window_create('insert', window=text_fields) tf = {} for f in range(31): e_find = tk.Entry(text_fields, width=16, relief='flat') e_replace = tk.Entry(text_fields, width=16, relief='flat') e_find.insert(0, 'find'+str(f)) e_replace.insert(0, 'replace'+str(f)) e_find.grid(row=0, column=0) e_replace.grid(row=0, column=1) text_fields.window_create('insert', window=e_find) text_fields.window_create('insert', window=e_replace) text_fields.insert('end', '\n') scrollbar = tk.Scrollbar(frame_fieldsscroll, width=15) scrollbar.config(command=text_fields.yview) text_fields.config(yscrollcommand=scrollbar.set) frame_fieldsscroll.pack() scrollbar.pack(side='right', fill='y') text_fields.pack(fill='both') text_fields.configure(state='disabled') frame_fieldsscroll.configure(state='disabled')
推荐答案
对于窗口中的对象,与文本一起可以滚动,您必须与 window_create 文本小部件的方法,而不是使用pack或pack或grid或place.
问题描述
I've embedded 100 rows in 2 columns. Each row is inside a single frame, and all packed inside a text widget. I'm trying to add a scroll bar, but it scrolls only text, while the columns won't move.
frame_fields = tk.Text(self.window) frame_fields.pack_propagate(0) tf = {} text_labels = tk.Text(frame_fields) text_labels.pack(side='left', expand='yes', fill='both') scrollbar = tk.Scrollbar(frame_fields) scrollbar.config(command=text_labels.yview) scrollbar.pack(side='right', fill='y') text_labels.config(yscrollcommand=scrollbar.set) for f in range(100): tf[f] = tk.Frame(text_labels) e_find = tk.Entry(tf[f]) e_replace = tk.Entry(tf[f]) e_find.pack(side='left') e_replace.pack(side='left') tf[f].pack() frame_fields.pack()
How should I change this code, so text_labels scroll?
A Solution
The code below creates the scrollable cells:
def create_cells(self): """Create cells for exception text""" # ---------------------------------------------- frame_fieldsscroll = tk.Text(self.main, relief='flat') text_fields = tk.Text(frame_fieldsscroll, relief='flat') frame_fieldsscroll.window_create('insert', window=text_fields) tf = {} for f in range(31): e_find = tk.Entry(text_fields, width=16, relief='flat') e_replace = tk.Entry(text_fields, width=16, relief='flat') e_find.insert(0, 'find'+str(f)) e_replace.insert(0, 'replace'+str(f)) e_find.grid(row=0, column=0) e_replace.grid(row=0, column=1) text_fields.window_create('insert', window=e_find) text_fields.window_create('insert', window=e_replace) text_fields.insert('end', '\n') scrollbar = tk.Scrollbar(frame_fieldsscroll, width=15) scrollbar.config(command=text_fields.yview) text_fields.config(yscrollcommand=scrollbar.set) frame_fieldsscroll.pack() scrollbar.pack(side='right', fill='y') text_fields.pack(fill='both') text_fields.configure(state='disabled') frame_fieldsscroll.configure(state='disabled')
推荐答案
For objects in a window to be scrollable along with the text you must add them with the window_create method of the text widget instead of using pack or grid or place.