변경

2014-08-28 3 views
-1

나는 유사한 코드를 가지고 다음과 같은변경

import tkinter as tk 
from tkinter import Tk 
from tkinter import ttk 

root = Tk() 

ttk.Label(root, text = 'label text', justify = 'center').grid(row=0, column=0) 
string = tk.StringVar() 
string.set('entry text') 
ttk.Entry(root, textvariable = string).grid(row=0, column=1) 
mainButton = ttk.Button(root, text = 'BUTTON').grid(row = 1, columnspan = 2) 

root.pack() 

효과적으로이 첫 번째 행을하게 한 후 라벨과 같은 행에 옆에 텍스트 상자, 그리고 모두 아래 버튼을 그. 이제 버튼을 누르면 버튼이있는 행에 새 레이블/항목을 추가하고 버튼을 한 행 아래로 이동하려고합니다. 이것을 실현할 수있는 방법이 있습니까?

+0

'mainTab'이 정의되지 않은 경우 각 위젯의 항목 텍스트를 검색 할 수 있습니다. –

+0

정확합니다. 내 코드에서 복사하여 붙여 넣고 몇 가지를 변경하고 잊어 버렸습니다. 감사. – zephyr

답변

5

grid_forget 사용하면 버튼을 제거하고 나중에 새로운 위치에 grid를 사용하여 다시 배치 할 수 있습니다. 아래 예제에서이를 증명했습니다. class에 프로그램을 만들었으므로 문자열과 같은 변수를 쉽게 전달할 수 있습니다 (self). 보시다시피, 나는 모든 새 StringVarself.string에 추가했습니다. 이렇게하면 self.string[index].get()

import tkinter as tk 
from tkinter import ttk 

class App(): 

    def __init__(self): 
     self.root = tk.Tk() 

     ttk.Label(self.root, text = 'label text', justify = 'center').grid(row=0, column=0) 
     self.string = [tk.StringVar()] 
     self.string[0].set('entry text') 
     ttk.Entry(self.root, textvariable = self.string[0]).grid(row=0, column=1) 
     self.mainButton = ttk.Button(self.root, text = 'BUTTON', command=self.callback) 
     self.mainButton.grid(row = 1, columnspan = 2) 

     self.root.mainloop() 

    def callback(self): 
     self.mainButton.grid_forget() 
     self.string.append(tk.StringVar()) 
     l = len(self.string) 
     self.string[l-1].set('entry text') 
     ttk.Label(self.root, text = 'label text', justify = 'center').grid(row=l-1, column=0) 
     ttk.Entry(self.root, textvariable = self.string[l-1]).grid(row=l-1, column=1) 
     self.mainButton.grid(row = l, columnspan = 2) 

App() 
+0

미안하지만 당신이 의미하는 것이 정말로 이해가되지 않을까 걱정됩니다. 내가 게시 한 코드에서 정확히 언제 잊어 버릴까요? – fhdrsdg

0

이렇게하면됩니다. 단추에 대한 명령을 설정하고 그에 대한 함수를 작성하면됩니다. 원래 코드가 작동한다고 말하면이 코드도 잘 작동합니다.

import tkinter as tk 
from tkinter import Tk 
from tkinter import ttk 

root = Tk() 

ttk.Label(tab, text = 'label text', justify = 'center').grid(row=0, column=0) 
string = tk.StringVar() 
string.set('entry text') 
ttk.Entry(tab, textvariable = string).grid(row=0, column=1) 

def clicked(): 
    ttk.Label(tab, text = 'label text 2', justify = 'center').grid(row=1, column=0) 
    string2 = tk.StringVar() 
    string.set('entry text') 
    ttk.Entry(tab, textvariable = string).grid(row=1, column=1) 

mainButton = ttk.Button(mainTab, text = 'BUTTON', command = clicked) 
mainbutton.grid(row = 2, columnspan = 2) 
# mainbutton row=2 will automatically sit at row 1 until a new row 'pushes' it down 

root.pack()