파이썬 2.6 및 표준 Tkinter를 사용하여 인터페이스의 레이아웃을 다시 디자인했습니다. 문제는 내가 이상한 행동을하고 있다는 것이고, 나는 Tkinter를 처음 사용하기 때문에 이것은 경험이 없기 때문에 간과 할 수있는 간단한 것일 수 있습니다. 내가 엔트리 위젯의 기본 값을 삽입 할 때Tkinter Grid Manager 문제가있는 중첩 프레임 문제
import Tkinter as tk
root = tk.Tk()
master = tk.Frame(root)
frame = tk.Frame(master).grid(sticky = tk.W)
item1 = "Label One"
L1 = tk.Label(frame, text = item1).grid(sticky = tk.W)
b1 = tk.Button(frame, text = "Button 1").grid(sticky = tk.W)
find = tk.Label(frame, text = "Find").grid(sticky = tk.W)
item = tk.Entry(frame, width = 50).grid(sticky = tk.W)
##item.insert(0,"Enter Item to Search For")
L2 = tk.Label(frame, text = "Label Two").grid(sticky = tk.W)
search = tk.Button(frame, text = "Search").grid(row = 3, column = 0)
frame2 = tk.Frame(master).grid(sticky = tk.W)
list1 = tk.Listbox(frame2, width = 100).grid(sticky = tk.W)
##yscroll = tk.Scrollbar(frame2,orient = tk.VERTICAL,command = list1.yview).grid(row = 5, column = 1, sticky = tk.N + tk.S + tk.W)
yscroll = tk.Scrollbar(frame2, orient = tk.VERTICAL).grid(row = 5, column = 1, sticky = tk.N + tk.S + tk.W)
##list1.configure(yscrollcommand = yscroll.set)
##xscroll = tk.Scrollbar(frame2, orient = tk.HORIZONTAL, command = list1.xview).grid(sticky = tk.W + tk.E)
xscroll = tk.Scrollbar(frame2, orient = tk.HORIZONTAL).grid(sticky = tk.W + tk.E)
##list1.configure(xscrollcommand = xscroll.set)
root.mainloop()
이 다음과 같은 오류가 발생 : 여기
원하는 레이아웃을 얻기 위해 마스터 프레임 안에 어떻게 중첩하고 프레임의 몇 가지 예제 코드입니다Traceback (most recent call last):
File "H:\Tkinter\Grid.py", line 17, in <module>
item.insert(0,"Enter Item to Search For")
AttributeError: 'NoneType' object has no attribute 'insert'
비슷한 오류가 예를 들어 code.These의 모든 주석 라인에서 발생하는 행동이 나는 현재 스크롤바가 내가 할 수 있기 때문에 작동하지 않을 수 있습니다 때문에 perfrom 할 필요가 있습니다 : 나는 중첩 프레임을 시작하기 전에, 그것은 일 그들에게리스트 w를 바꾸라고 말한다. 암탉 스크롤.
1. 프레임을 이와 같이 중첩하면 다른 방식으로 위젯의 변수에 액세스해야합니까?
2. 중첩 프레임을 사용하고 있고 자식과 부모가 모두 눈금을 사용하고있을 때 내 위젯 배치가 주 (master) 행과 열 수에 해당하는 이유는 무엇입니까? Y 축 스크롤 막대의 행을 보면 행 = 5, col = 1 인 마스터를 수행해야합니다. 위젯에 frame2로 설정된 부모가 있고 frame2에 그리드를 사용하기를 원하기 때문에 행 0, 열 1의 frame2 여야한다고 생각합니다. 그러나 마스터 프레임 격자를 사용하는 것 같습니다.
3. 다른 프레임에 눈금 선을 표시 할 수 있습니까?
코드를 변경하여 오류의 원인이 된 행의 주석 처리를 제거하고 이제는 오류가 발생하지 않지만 emtpy 회색 GUI가 표시됩니다. 내가 보여 주거나 보여줄 전화가 없어 졌습니까? – Brandon
@ user1546099 - 결코 마스터가 아니야. 주목할 것은 위젯이 그리드의 어디에 있는지 알 수 있도록'row ='와'column ='을 여러 그리드 호출에 전달해야 할 것입니다. 각 프레임은 본질적으로 자체 그리드를 정의합니다. – mgilson
그래서 나는 올바른 이름에 "master"라는 단어를 사용해서는 안된다. 그러나 루트에 그리드 관리자 레이아웃을 사용하는 것이 좋습니다. (기술적으로 마스터입니다) 원한다면 맞습니까? – Brandon