#python #tkinter #treeview
Вопрос:
Я пытаюсь поместить изображение дерева в подкадр, но оно не помещается в кадр.
class Application(Frame): def __init__(self,master=None): self.pipeLine =[] super().__init__(master) self.master = master self.PipeFrame = Frame(self.master,width=200,height=200).place(x=30,y=30) self.PipeLineFrame = Frame(self.PipeFrame,width=200,height=220,bg='white',).place(x=10,y=100) self.createPipeTree() self.createWidget() self.pack() def createPipeTree(self): self.PipeTree = ttk.Treeview(self.PipeLineFrame,column=("input","output")) self.PipeTree.column("#0",minwidth=25,width= 60) self.PipeTree.column("input",anchor=W,width=60) self.PipeTree.column("output",anchor=W,width=60) self.PipeTree.heading("#0",text="PipeLine") self.PipeTree.heading("input",text="input") self.PipeTree.heading("output",text="output") self.PipeTree.pack(side=LEFT,expand=True) def createWidget(self): self.addNode = Button(self.PipeFrame,text="click to add procedure into pipeline",command=self.addNode).place(x=10,y=20) self.inputBtn1 = Button(self.PipeFrame, text="F0").place(x=10,y=350) self.inputBtn2 = Button(self.PipeFrame, text="Mel" ).place(x=50, y=350) self.inputBtn3 = Button(self.PipeFrame, text="audio" ).place(x=100, y=350) self.inputBtn4 = Button(self.PipeFrame, text="text").place(x=150,y=350) self.inputBtn5 = Button(self.PipeFrame, text="f0").place(x=200, y=350) if __name__ == '__main__': root = Tk() root.geometry("800x400 200 300") root.title("HDI is the best") Application(master=root) root.mainloop()
PipeTree должен вписываться в рамку конвейера (белая область), но в настоящее время он выходит из рамки вот так. текущий результат
Ответ №1:
Когда вы размещаете виджет, вы можете сделать это в 1 строке, как это:
Widget(root).pack()
или вы можете дать ему имя и использовать 2 строки, как это:
name = Widget(root) name.pack()
Вы не можете объединить эти 2 метода и дать ему имя с помощью одной строки. Это ошибка, которую вы получите, если попытаетесь это сделать.
Комментарии:
1. Я разделяю функцию места. В настоящее время это выглядит следующим образом : self.PipeFrame = Рамка(self.master,ширина = 200,высота=200) self.PipeFrame.место(x=30,y=30) Это устраняет проблему, но я не знаю, как она ее устраняет. Не могли бы вы любезно объяснить, знаете ли вы причину?
2. Потому что, если вы объедините их, имя станет результатом метода place (), который не является. Если вы не используете None в качестве главного виджета, tkinter по умолчанию использует первое корневое окно.