GUI를 빌드하는 작은 파이썬 프로그램이 있습니다. 텍스트 위젯을 사용하여 세로로 쌓인 프레임이 포함 된 쉽게 스크롤 가능한 창을 만들려고합니다. 프레임이 버튼 누름에서 작성되고 텍스트 위젯의 맨 아래에 추가됩니다. 이것은 잘 작동합니다. 그러나 텍스트 상자를 가로로 채우기 위해이 프레임을 늘리는 데 어려움을 겪고 있습니다.Tkinter 텍스트 위젯 가로 채우기
import Tkinter as tk
class NewEntry(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
#self.pack(fill="x", expand=True) #possible error source
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0,weight=1)
textField = tk.Entry(self)
textField.grid(row=1, column=0, padx=2, pady=1, sticky="ew")
addButton = tk.Button(self, text="Add", cursor="arrow")
addButton.grid(row=1, column=1, padx=10, pady=2, sticky="ew")
newLabel = tk.Label(self, text="Test", bg="#5522FF")
newLabel.grid(row=0, padx=2, pady=2, sticky="ew", columnspan=2)
newLabel.columnconfigure(0, weight=1)
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent)
self.parent=parent
self.grid()
self.columnconfigure(0, weight=1)
self.grid_rowconfigure(0,weight=1)
self.text = tk.Text(self, wrap="none", bg="#AA3333")
vsb = tk.Scrollbar(orient="vertical", command=self.text.yview)
self.text.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
self.text.pack(fill="both", expand=True)
b = tk.Button(self, text="Button #%s" % 1, command=self.OnButtonClick)
self.text.window_create("end", window=b)
self.text.insert("end", "\n")
def OnButtonClick(self):
self.text.configure(state="normal")
panel = NewEntry(self.text, bg="#FF1111")
self.text.window_create("end", window=panel)
self.text.insert("end", "\n")
self.text.configure(state="disabled")
if __name__=="__main__":
root = tk.Tk()
root.resizable(True, True)
appinstance=MainApplication(root)
appinstance.pack(fill="both", expand=True)
root.mainloop()
나는 등 여러 가지 grid_columnconfigure에 대해 이야기 게시물 채우기 옵션, 끈적 옵션을 읽었습니다,하지만 난 그것을 제대로 작성 얻을 수 없었다. 텍스트 위젯의 window_create() 메서드가 크기 제한을 생성하는지 궁금합니다. NewEntry 클래스의 코드가 window_create 메서드에서 허용하는 공간을 제대로 채우는 것처럼 보이지만 텍스트 상자의 너비를 채우기 위해 "패널"을 만드는 방법을 알지 못합니다.
저는 텍스트 상자 대신 캔버스를 사용할 가능성에 대해서도 알고 있습니다.하지만 동적 크기와 스크롤 가능성을 유지하려고합니다. 당신이 간단한 위젯 스택을 가지고 있다면, 텍스트 위젯이 가장 쉽다는 여러 기사를 읽었습니다. 그래도 나는 어떤 권고도 받아 들일 것이다.
이것이 실제 코드입니까? "내부에 기하학 관리자 팩을 사용할 수 없습니다."라는 오류가 나타납니다." –
방금 복사 한 내용을 복사하여 붙여 넣기하여 실제로 변경하지 않았는지 확인합니다. 문제가 발생하면 Python 2.7을 실행하고 있습니다. – Tarm
코드에 버그가 분명히 있습니다.이 정확한 코드는 사용할 수없는 것 같습니다. –