Python self.tree.configure(yscrollcommand=vsb.set) self.tree.grid(列=0,行=0,列span=2,行span=5,sticky='NSEW') 网格(列=1,行=0,行span=5,sticky='ENS') self.tree.heading(tab\u header[0],text=tab\u header[0].title()) self.tree.column(tab\u header[0],宽度=30,锚定='center') self.tree.heading(tab\u header[1],text=tab\u header[1].title()) self.tree.column(tab_header[1],width=170,锚定='center') self.tree.insert(“”,'end',value=(“”,“(new)”) self.tree.bind(“,self.getPtrnTable) self.counter=1 打印(类型(自动计数器)) def附加说明(自身): 如果(self.pType.get()=“Thing1”): self.description=self.pType.get() elif(self.pType.get()=“Thing2”): self.description=self.pType.get() self.tree.insert(“”,'end',value=(self.counter,self.description)) self.counter+=1 打印(自动计数器) 打印(类型(自动计数器)) self.nominalTableSelector() self.repopEntries() def取消登录(自我): treeCnt=len(self.tree.get\u children()) items=self.tree.get_children() 对于范围内的i(int(self.patNum),treeCnt-1): self.tree.set(items[i],'Description',self.tree.item(items[i+1],'values')[1]) self.tree.delete(项目[-1]) self.nominalTableSelector() self.updateButtons() def更新尝试(自我): 通过 def GETPRNTABLE(自身,事件): self.item=self.tree.identify行(event.y) 尝试: self.patNum=self.tree.item(self.item,'values')[0] 除索引器外: self.patNum=“” self.repopEntries() self.updateButtons() def nominalTableSelect(自): self.tree.focus(self.tree.get_children()[0]) self.tree.selection\u集(self.tree.get\u children()[0]) self.item=self.tree.get_children()[0] self.patNum=self.tree.item(self.item,'values')[0] def报告(自我): 尝试: 如果(self.tree.item(self.item,'values')[1]=='(新)'): self.pType.set(“Thing1”) self.makeWidgets() 打印(“重新填充新的/空白条目…”) 其他: self.thing,junk=self.tree.item(self.item,'values')[1]。拆分(“:”) self.iNum=int(self.tree.item(self.item,'values')[0])-1 self.pType.set(str(self.thing)) self.makeWidgets()#恢复正确的标签/条目布局 self.tree.focus(self.item) self.tree.selection\u集(self.item) 打印(“重新填充数据…”) #这里有一些代码可以从存储的数据中重新填充输入框 除了(索引器错误、名称错误、属性错误): 通过 def更新按钮(自身): 打印(“”) 打印(“”) 打印(“更新按钮…”) 打印(“”) 相加=0 更新=0 尝试: add=self.updtBtn.winfo_exists() 打印(“存在更新按钮…”) 打印(“将添加标志设置为:”,添加) 除了(AttributeError,NameError): 打印(“更新按钮不存在。”) 尝试: update=self.addBtn.winfo_exists() 打印(“添加按钮存在…”) 打印(“将更新标志设置为:”,更新) 除了(AttributeError,NameError): 打印(“添加按钮不存在”) 打印(“”) 打印(“添加=”,添加) 打印(“update=”,update) 打印(“要检查的项目为:”,self.tree.Item(self.Item,'values')[1]) 打印(“”) 如果(len(self.tree.get_children())==1): 打印(“树上什么都不做……什么都不做。”) 其他: 如果(更新==1):#存在添加按钮-更改为更新 打印(“更改为更新按钮…”) self.btnLoc=self.addBtn.grid_info() 打印(“添加按钮位置:”,self.btnLoc) 打印(“销毁添加,替换为更新…”) self.addBtn.destroy() 打印(“添加按钮状态:”,self.addBtn.winfo_exists()) self.updtBtn=tk.Button(self.tab2,text='updatepattern',command=self.updateEntry) self.updtBtn.grid(column=int(self.btnLoc[“column”]),row=int(self.btnLoc[“row”]),sticky='NSEW') self.delBtn=tk.Button(self.tab2,text='Delete Pattern',command=self.delEntry) self.delBtn.grid(column=int(self.btnLoc[“column”])-1,row=int(self.btnLoc[“row”]),sticky='NSEW') 打印(“更新按钮状态:”,self.updtBtn.winfo_exists()) 打印(“删除按钮状态:”,self.delBtn.winfo_exists()) 打印(“”) elif(添加==1):#存在更新按钮-更改为添加 打印(“更改为添加按钮…”) self.btnLoc=self.updtBtn.grid_info() 打印(“更新按钮位置:”,self.btnLoc) 打印(“销毁更新,替换为添加”) self.updtBtn.destroy() 打印(“更新按钮状态:”,self.updtBtn.winfo_exists()) self.delBtn.destroy() 打印(“删除按钮状态:”,self.delBtn.winfo_exists()) self.addBtn=tk.Button(self.tab2,text='addEntry',command=self.addEntry) self.addBtn.grid(column=int(self.btnLoc[“column”]),row=int(self.btnLoc[“row”]),sticky=NSEW') 打印(“添加按钮状态:”,self.addBtn.winfo_exists()) def main(): MainGUI().mainloop() 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main()

Python self.tree.configure(yscrollcommand=vsb.set) self.tree.grid(列=0,行=0,列span=2,行span=5,sticky='NSEW') 网格(列=1,行=0,行span=5,sticky='ENS') self.tree.heading(tab\u header[0],text=tab\u header[0].title()) self.tree.column(tab\u header[0],宽度=30,锚定='center') self.tree.heading(tab\u header[1],text=tab\u header[1].title()) self.tree.column(tab_header[1],width=170,锚定='center') self.tree.insert(“”,'end',value=(“”,“(new)”) self.tree.bind(“,self.getPtrnTable) self.counter=1 打印(类型(自动计数器)) def附加说明(自身): 如果(self.pType.get()=“Thing1”): self.description=self.pType.get() elif(self.pType.get()=“Thing2”): self.description=self.pType.get() self.tree.insert(“”,'end',value=(self.counter,self.description)) self.counter+=1 打印(自动计数器) 打印(类型(自动计数器)) self.nominalTableSelector() self.repopEntries() def取消登录(自我): treeCnt=len(self.tree.get\u children()) items=self.tree.get_children() 对于范围内的i(int(self.patNum),treeCnt-1): self.tree.set(items[i],'Description',self.tree.item(items[i+1],'values')[1]) self.tree.delete(项目[-1]) self.nominalTableSelector() self.updateButtons() def更新尝试(自我): 通过 def GETPRNTABLE(自身,事件): self.item=self.tree.identify行(event.y) 尝试: self.patNum=self.tree.item(self.item,'values')[0] 除索引器外: self.patNum=“” self.repopEntries() self.updateButtons() def nominalTableSelect(自): self.tree.focus(self.tree.get_children()[0]) self.tree.selection\u集(self.tree.get\u children()[0]) self.item=self.tree.get_children()[0] self.patNum=self.tree.item(self.item,'values')[0] def报告(自我): 尝试: 如果(self.tree.item(self.item,'values')[1]=='(新)'): self.pType.set(“Thing1”) self.makeWidgets() 打印(“重新填充新的/空白条目…”) 其他: self.thing,junk=self.tree.item(self.item,'values')[1]。拆分(“:”) self.iNum=int(self.tree.item(self.item,'values')[0])-1 self.pType.set(str(self.thing)) self.makeWidgets()#恢复正确的标签/条目布局 self.tree.focus(self.item) self.tree.selection\u集(self.item) 打印(“重新填充数据…”) #这里有一些代码可以从存储的数据中重新填充输入框 除了(索引器错误、名称错误、属性错误): 通过 def更新按钮(自身): 打印(“”) 打印(“”) 打印(“更新按钮…”) 打印(“”) 相加=0 更新=0 尝试: add=self.updtBtn.winfo_exists() 打印(“存在更新按钮…”) 打印(“将添加标志设置为:”,添加) 除了(AttributeError,NameError): 打印(“更新按钮不存在。”) 尝试: update=self.addBtn.winfo_exists() 打印(“添加按钮存在…”) 打印(“将更新标志设置为:”,更新) 除了(AttributeError,NameError): 打印(“添加按钮不存在”) 打印(“”) 打印(“添加=”,添加) 打印(“update=”,update) 打印(“要检查的项目为:”,self.tree.Item(self.Item,'values')[1]) 打印(“”) 如果(len(self.tree.get_children())==1): 打印(“树上什么都不做……什么都不做。”) 其他: 如果(更新==1):#存在添加按钮-更改为更新 打印(“更改为更新按钮…”) self.btnLoc=self.addBtn.grid_info() 打印(“添加按钮位置:”,self.btnLoc) 打印(“销毁添加,替换为更新…”) self.addBtn.destroy() 打印(“添加按钮状态:”,self.addBtn.winfo_exists()) self.updtBtn=tk.Button(self.tab2,text='updatepattern',command=self.updateEntry) self.updtBtn.grid(column=int(self.btnLoc[“column”]),row=int(self.btnLoc[“row”]),sticky='NSEW') self.delBtn=tk.Button(self.tab2,text='Delete Pattern',command=self.delEntry) self.delBtn.grid(column=int(self.btnLoc[“column”])-1,row=int(self.btnLoc[“row”]),sticky='NSEW') 打印(“更新按钮状态:”,self.updtBtn.winfo_exists()) 打印(“删除按钮状态:”,self.delBtn.winfo_exists()) 打印(“”) elif(添加==1):#存在更新按钮-更改为添加 打印(“更改为添加按钮…”) self.btnLoc=self.updtBtn.grid_info() 打印(“更新按钮位置:”,self.btnLoc) 打印(“销毁更新,替换为添加”) self.updtBtn.destroy() 打印(“更新按钮状态:”,self.updtBtn.winfo_exists()) self.delBtn.destroy() 打印(“删除按钮状态:”,self.delBtn.winfo_exists()) self.addBtn=tk.Button(self.tab2,text='addEntry',command=self.addEntry) self.addBtn.grid(column=int(self.btnLoc[“column”]),row=int(self.btnLoc[“row”]),sticky=NSEW') 打印(“添加按钮状态:”,self.addBtn.winfo_exists()) def main(): MainGUI().mainloop() 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main(),python,tkinter,Python,Tkinter,虽然我仍然不确定标志是否总是正确设置(使用.winfo_exists()函数),但我还是能够得到一个有效的解决方案。通过向updateButtons模块添加另一个条件检查,我检查默认的“Ne import tkinter as tk from tkinter import ttk import numpy as np class MainGUI(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.

虽然我仍然不确定标志是否总是正确设置(使用.winfo_exists()函数),但我还是能够得到一个有效的解决方案。通过向updateButtons模块添加另一个条件检查,我检查默认的“Ne
import tkinter as tk
from tkinter import ttk
import numpy as np


class MainGUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title('Title')
        self.geometry('750x500')

        # Adds tabs to main window
        self.nb = ttk.Notebook(self)
        self.nb.grid(row=0, column=0, columnspan=5, rowspan=4, sticky='NESW')
        self.tab1 = ttk.Frame(self.nb)
        self.nb.add(self.tab1, text='Tab1')
        self.tab2 = ttk.Frame(self.nb)
        self.nb.add(self.tab2, text='Tab2')

        # defines a grid 50 x 50 cells in the main window & tabs
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)
        tab1_r = 10
        tab1_c = 4
        tab2_r = 8
        tab2_c = 4
        for i in range(tab1_r):
            self.tab1.rowconfigure(i, weight=1)
        for i in range(tab1_c):
            self.tab1.columnconfigure(i, weight=1)
        for i in range(tab2_r):
            self.tab2.rowconfigure(i, weight=1)
        for i in range(tab2_c):
            self.tab2.columnconfigure(i, weight=1)

        self.tab1Label = tk.Label(self.tab1, text="This is a Label")
        self.tab1Label.grid(column=0, row=0, sticky='NW')
        self.tab1Label2 = tk.Label(self.tab1, text="This is also a Label")
        self.tab1Label2.grid(column=0, row=1, sticky='NW')

        self.types = [('Thing1'), ('Thing2')]
        self.pType = tk.StringVar()
        self.pType.set("Thing1")  # initialize
        col = 0
        for text in self.types:
            self.rBtn = tk.Radiobutton(self.tab2, text=text, variable=self.pType, value=text, command=self.makeWidgets)
            self.rBtn.grid(column=col, row=6, sticky='E')
            col += 1

        self.makeTable()
        self.makeWidgets()

    def makeWidgets(self):
        try:
            for self.label in self.Labels:
                self.label.destroy()
        except AttributeError:
            pass

        try:
            for self.entry in self.Entries:
                self.entry.destroy()
        except AttributeError:
            pass

        try:
            self.addBtn.destroy()
        except AttributeError:
            pass

        try:
            self.delBtn.destroy()
        except AttributeError:
            pass

        try:
            self.updtBtn.destroy()
        except AttributeError:
            pass

        self.Labels = []
        self.Entries = []

        if(self.pType.get() == "Thing1"):
            self.labText = [('Add to Table:')]
        elif(self.pType.get() == "Thing2"):
            self.labText = [('Add to Table:'), ('Also add to Table:')]

        self.xGrid = 1
        self.yGrid = int(np.ceil(len(self.labText) / self.xGrid))
        i = 0
        for j in range(0, self.xGrid + 1, 2):
            for k in range(self.yGrid):
                if(i == len(self.labText)):
                    break
                else:
                    self.label = tk.Label(self.tab2, text=self.labText[i])
                    self.label.grid(column=j, row=k + 8, sticky='SW')
                    self.Labels.append(self.label)
                    self.entry = tk.Entry(self.tab2)
                    self.entry.insert(0, '0.0000')
                    self.entry.grid(column=j + 1, row=k + 8, sticky='NS')
                    self.Entries.append(self.entry)
                    i += 1

        self.addBtn = tk.Button(self.tab2, text='Add Entry', command=self.addEntry)
        self.addBtn.grid(column=self.xGrid + 1, row=self.yGrid + 9, sticky='NSEW')

        self.tree.focus(self.tree.get_children()[0])
        self.tree.selection_set(self.tree.get_children()[0])

    def makeTable(self):
        tab_header = ['Pattern #', 'Description']
        self.tree = ttk.Treeview(self.tab2, columns=tab_header, height=5, show="headings")
        vsb = ttk.Scrollbar(self.tab2, orient="vertical", command=self.tree.yview)
        self.tree.configure(yscrollcommand=vsb.set)
        self.tree.grid(column=0, row=0, columnspan=2, rowspan=5, sticky='NSEW')
        vsb.grid(column=1, row=0, rowspan=5, sticky='ENS')
        self.tree.heading(tab_header[0], text=tab_header[0].title())
        self.tree.column(tab_header[0], width=30, anchor='center')
        self.tree.heading(tab_header[1], text=tab_header[1].title())
        self.tree.column(tab_header[1], width=170, anchor='center')
        self.tree.insert('', 'end', values=("", "(new)"))
        self.tree.bind("<ButtonRelease-1>", self.getPtrnTable)
        self.counter = 1
        print(type(self.counter))

    def addEntry(self):
        if(self.pType.get() == "Thing1"):
            self.description = self.pType.get() + ": " + self.Entries[0].get()
        elif(self.pType.get() == "Thing2"):
            self.description = self.pType.get() + ": " + self.Entries[0].get() + " and " + self.Entries[1].get()
        self.tree.insert('', 'end', values=(self.counter, self.description))
        self.counter += 1
        print(self.counter)
        print(type(self.counter))
        self.nominalTableSelect()
        self.repopEntries()

    def delEntry(self):
        treeCnt = len(self.tree.get_children())
        items = self.tree.get_children()
        for i in range(int(self.patNum), treeCnt - 1):
            self.tree.set(items[i], 'Description', self.tree.item(items[i + 1], 'values')[1])
        self.tree.delete(items[-1])

        self.nominalTableSelect()
        self.updateButtons()

    def updateEntry(self):
        pass

    def getPtrnTable(self, event):
        self.item = self.tree.identify_row(event.y)
        try:
            self.patNum = self.tree.item(self.item, 'values')[0]
        except IndexError:
            self.patNum = ''
        self.repopEntries()
        self.updateButtons()

    def nominalTableSelect(self):
        self.tree.focus(self.tree.get_children()[0])
        self.tree.selection_set(self.tree.get_children()[0])
        self.item = self.tree.get_children()[0]
        self.patNum = self.tree.item(self.item, 'values')[0]

    def repopEntries(self):
        try:
            if(self.tree.item(self.item, 'values')[1] == '(new)'):
                self.pType.set("Thing1")
                self.makeWidgets()
                print("Repopulate with New/Blank Entries...")
            else:
                self.thing, junk = self.tree.item(self.item, 'values')[1].split(":")
                self.iNum = int(self.tree.item(self.item, 'values')[0]) - 1
                self.pType.set(str(self.thing))
                self.makeWidgets()  # restore correct label/entry layout
                self.tree.focus(self.item)
                self.tree.selection_set(self.item)
                print("Repopulate with DATA...")
                # some code here to repopulate entry boxes from stored data
        except (IndexError, NameError, AttributeError):
            pass

    def updateButtons(self):
        print("")
        print("")
        print("Update Buttons...")
        print("")
        add = 0
        update = 0
        try:
            add = self.updtBtn.winfo_exists()
            print("Update Button Exists...")
            print("Set ADD flag to: ", add)
        except (AttributeError, NameError):
            print("Update Button Does NOT Exist.")

        try:
            update = self.addBtn.winfo_exists()
            print("Add Button Exists...")
            print("Set UPDATE flag to: ", update)
        except (AttributeError, NameError):
            print("Add Button Does NOT Exist")

        print("")
        print("add = ", add)
        print("update = ", update)
        print("Item to be Checked is: ", self.tree.item(self.item, 'values')[1])
        print("")

        if(len(self.tree.get_children()) == 1):
            print("Nothing in Tree...do nothing.")
        else:
            if(update == 1):   # Add Button Exists - Change to Update
                print("Change to Update Button...")
                self.btnLoc = self.addBtn.grid_info()
                print("Add Button Location: ", self.btnLoc)
                print("Destroy Add, Replace with Update...")
                self.addBtn.destroy()
                print("Add Button Status: ", self.addBtn.winfo_exists())
                self.updtBtn = tk.Button(self.tab2, text='Update Pattern', command=self.updateEntry)
                self.updtBtn.grid(column=int(self.btnLoc["column"]), row=int(self.btnLoc["row"]), sticky='NSEW')
                self.delBtn = tk.Button(self.tab2, text='Delete Pattern', command=self.delEntry)
                self.delBtn.grid(column=int(self.btnLoc["column"]) - 1, row=int(self.btnLoc["row"]), sticky='NSEW')
                print("Update Button Status: ", self.updtBtn.winfo_exists())
                print("Delete Button Status: ", self.delBtn.winfo_exists())
                print("")
            elif(add == 1):  # Update Button Exists - Change to Add
                print("Change to Add Button...")
                self.btnLoc = self.updtBtn.grid_info()
                print("Update Button Location: ", self.btnLoc)
                print("Destroy Update, Replace with Add")
                self.updtBtn.destroy()
                print("Update Button Status: ", self.updtBtn.winfo_exists())
                self.delBtn.destroy()
                print("Delete Button Status: ", self.delBtn.winfo_exists())
                self.addBtn = tk.Button(self.tab2, text='Add Entry', command=self.addEntry)
                self.addBtn.grid(column=int(self.btnLoc["column"]), row=int(self.btnLoc["row"]), sticky='NSEW')
                print("Add Button Status: ", self.addBtn.winfo_exists())


def main():
    MainGUI().mainloop()


if __name__ == '__main__':
    main()
def updateButtons(self):
    add = 0
    update = 0
    try:
        add = self.updtBtn.winfo_exists()
    except (AttributeError, NameError):
        pass

    try:
        update = self.addBtn.winfo_exists()
    except (AttributeError, NameError):
        pass

    if(len(self.tree.get_children()) == 1):
        pass
    elif(self.tree.item(self.item, 'values')[1] == '(new)'):
        self.repopEntries()
    else:
        if(update == 1):   # Add Button Exists - Change to Update
            self.btnLoc = self.addBtn.grid_info()
            self.addBtn.destroy()
            self.updtBtn = tk.Button(self.tab2, text='Update Pattern', command=self.updateEntry)
            self.updtBtn.grid(column=int(self.btnLoc["column"]), row=int(self.btnLoc["row"]), sticky='NSEW')
            self.delBtn = tk.Button(self.tab2, text='Delete Pattern', command=self.delEntry)
            self.delBtn.grid(column=int(self.btnLoc["column"]) - 1, row=int(self.btnLoc["row"]), sticky='NSEW')
        elif(add == 1):  # Update Button Exists - Change to Add
            self.btnLoc = self.updtBtn.grid_info()
            self.updtBtn.destroy()
            self.delBtn.destroy()
            self.addBtn = tk.Button(self.tab2, text='Add Entry', command=self.addEntry)
            self.addBtn.grid(column=int(self.btnLoc["column"]), row=int(self.btnLoc["row"]), sticky='NSEW')