我正在尝试使用ttk.Notebook
小部件创建多个标签。我正在创建一个简单的多标签记事本。但我不知道如何处理笔记本小部件。但是,当我单击“保存”按钮时,它会覆盖由于我在self.tx.get("1.0","end-1c")
中声明的所有选项卡文本区域。所有写入的文件都会根据最后一个文本更改其文本。感谢您的帮助
#-*- coding: utf-8 -*-
import tkinter.ttk as ttks
from tkinter import LEFT,RIGHT,X,Y,BOTH
class MainUI:
def __init__(self,master):
self.master = master
self.nb = ttks.Notebook(self.master)
self.nb.pack(fill='both',expand=1)
self.name = ttks.Entry(self.master)
self.name.pack()
self.save_tab = ttks.Button(self.master,text="save",command=lambda:self.save_file()).pack()
#tab1
self.page1 = ttks.Frame(self.nb)
self.txt = ttks.tkinter.Text(self.page1)
self.txt.pack(fill='both',expand=1)
self.nb.add(self.page1,text="tab1")
self.page2 = ttks.Frame(self.nb)
self.nb.add(self.page2,text="tab2")
self.master.bind('',self.add_tabs)
def add_tabs(self,event):
self.page_name = ttks.Frame(self.nb)
self.tx = ttks.tkinter.Text(self.page_name)
self.tx.pack(fill=BOTH,expand=1)
self.nb.add(self.page_name,text="pagename")
def save_file(self):
self.fname = self.name.get()
self.txtinput = self.tx.get("1.0","end-1c")
with open(self.fname,'w') as f:
f.write(self.txtinput)
if __name__ == "__main__":
root = ttks.tkinter.Tk()
root.title('Tabs>>')
root.geometry('500x500')
MainUI(root)
root.mainloop()
答案 0 :(得分:0)
在add_tabs
中,每次添加新标签时,您要替换self.tx
的值。即您只记得上一次创建的文本小部件。您需要:
在__init__
中,添加:
self.txs = [] # "s" suffix to discern list and elements
在add_tabs
中,使用:
tx = ttks.tkinter.Text(self.page_name)
self.txs.append(tx) # append to list
tx.pack(...)
在save_file
中,使用:
tab_index = self.nb.index(self.nb.select())
tx = self.txs[tab_index + 1] # may need to adjust depending on how much "static" tabs are in front
txtinput = self.tx.get("1.0", "end-1c")
# ...