2016-09-12 6 views
0

Я с целью сделать программу входа в систему, но единственная часть, которая меня смущает, как сделать frames.I нужно 3 различных кадров, но я не знаю и как сделать кадр другой тогда как это:Как создать вспомогательные кадры с определенным макетом?

mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

, и я могу делать только ярлыки и виджеты с использованием этого единого мэйнфрейма. Что касается другого, это вне меня. Мне нужно точно знать, что нужно размещать вставки внутри каждого фрейма, и даже после создания фреймов я не знаю, как помещать материал в сетку. Пойду ли я для общей сетки или что-то изменится после создания сетки. Я использую следующий макет для создания фрейма. В основном я надеюсь на крушение в кадрах. Любая информация, которую я собрал, не имеет смысла для меня, даже после того, как я попытался поместить ее в код.

enter image description here

У меня есть часть кодирования вниз только не часть рамы.

#Import tkinter to make gui 
from tkinter import * 
from tkinter import ttk 
import codecs 

def login(*args 
     ): 
    file = open("rot13.txt", "r") 
    lines = file.readlines() 
    uname = user.get() 
    pword = pw.get() 

    for i in lines: 
     x = i.split() 
     if codecs.encode(uname,'rot13') == x[0] and codecs.encode(pword,'rot13') == x[1]: 
      result.set("Successful") 
      break; 
     else: 
      result.set("Access Denied") 

root = Tk() 
root.title("Login") 

#Configures column and row settings and sets padding 
mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

user = StringVar() 
pw = StringVar() 
result = StringVar() 

user_entry = ttk.Entry(mainframe, width=20, textvariable=user) 
user_entry.grid(column=2, row=1, sticky=(W, E)) 

pw_entry = ttk.Entry(mainframe, width=20, textvariable=pw) 
pw_entry.grid(column=2, row=2, sticky=(W, E)) 

ttk.Label(mainframe, text="Username ").grid(column=1, row=1, sticky=W) 
ttk.Label(mainframe, text="Password ").grid(column=1, row=2, sticky=W) 
ttk.Label(mainframe, text="").grid(column=1, row=3, sticky=W) 
ttk.Label(mainframe, text="Result").grid(column=1, row=4, sticky=W) 
ttk.Label(mainframe, text="").grid(column=1, row=5, sticky=W) 

ttk.Button(mainframe, text="Login", command=login).grid(column=3, row=6, sticky=W) 

#Makes a spot to put in result 
ttk.Label(mainframe, textvariable=result).grid(column=2, row=4, sticky=(W, E)) 
#Opens up with item selected and allows you to enter username without having to click it 
user_entry.focus() 
#Runs calculate if click enter 
root.bind('<Return>', login) 
root.mainloop() 
+0

Длинное объяснение + довольно изображение + красивый MCVE ... Но я до сих пор не получили то, что вы действительно хотите достичь:»... единственная часть, которая сбивает с толку меня, как сделать фреймы. Мне нужны 3 разных фрейма, но я не знаю, как сделать фрейм другим тогда следующим образом: ... Что касается создания другого, это вне меня. Мне нужно точно знать, какие именно вставки внутри каждый кадр и даже после создания фреймов я не знаю, как помещать вещи в сетку. Пойду ли я для общей сетки или что-то изменится после создания сетки ». и т. д. Что означают эти все (предложения)? –

+0

Вы хотите получить представление, как на изображении, которое вы указали выше? Итак, что мешает вам туда добраться? Просто сделайте несколько кадров, поместите нужные виджеты в правильные рамки, и все. –

+0

То, что я хочу, состоит в том, чтобы иметь три кадра, подобные этим трем боксам на изображении. Я хочу поместить имя пользователя и пароль в первый ящик результата входа во второй ящик и кнопку входа в третий ящик. Я хочу знать, как поместить виджеты в три окна и как создать эти три окна (фреймы). Я не знаю, как сделать более 1 кадра. Я пытаюсь сделать 1 большой фрейм, а затем сделать три вспомогательных кадра с использованием этого мэйнфрейма, но ни один из моих виджетов не появляется. –

ответ

1

Я считаю, что ключевым моментом, что вам не хватает в том, что подкадры использования мэйнфреймов мэйнфреймов в качестве родителя и что виджеты внутри подрамники использовать подрамник в качестве родителя. Кроме того, вы можете разместить подкадр в пределах мэйнфрейма и виджетов подкадра в подкадре. Вам не нужно передавать родителей в .grid, потому что каждый виджет знает своего родителя. Упрощенный пример:

from tkinter import * 
root = Tk() 
mainframe = Frame(root) 
login = Frame(mainframe) 
label = Label(login, text='label') 
entry = Entry(login) 
display = Frame(mainframe) 
result = Label(display, text='display result') 

mainframe.grid() # within root 
login.grid(row=0, column=0) # within mainframe 
label.grid(row=0, column=0) # within login 
entry.grid(row=0, column=1) # within login 
display.grid() # within mainfram 
result.grid(row=2, column=0) # within display