Пайтон: Используя label в Tkinter

для программы я хочу разместить два label "Question" и "Answer" рядом с двумя я соответствую текста. Поскольку он появляется в следующем изображении:introducir la descripción de la imagen aquí

Проблема - что со следующим кодом:

from tkinter import *

#Creando una ventanta principal
window=Tk()
window.geometry("500x300+100+100")
window.title("Question Editor")

#Creando un campo de texto para question
Entryquestion=StringVar()
Entryquestion.set("")
txtquestion=Entry(window,textvariable=Entryquestion).place(x=50,y=140)

#Creando un campo de texto para answer
Entryanswer=StringVar()
Entryanswer.set("")
txtquestion=Entry(window,textvariable=Entryanswer).place(x=50,y=170)
#Creando un label para el campo de texto "question"
var1 = StringVar()
label = Label( window, textvariable=var1, padx=10 )

var1.set("Question")
label.pack()

#Creando un label para el campo de texto "answer"
var2 = StringVar()
label = Label( window, textvariable=var2, padx=10 )
var2.set("Answer")
label.pack()

#Creando un botón para guardar pregunta y respuesta
btnSave=Button(window,text="Save question and answer",command=Entryquestion,font=("Agency FB",14)).place(x=130,y=200)

Он дает мне следующий результат: introducir la descripción de la imagen aquí

Как я могу делать, чтобы получать визуальную конфигурацию первого изображения, которое я показал?

Большое спасибо заранее.

1
задан 11.04.2017, 16:04
1 ответ

Проблема состоит в том, что ты используешь place для posicionar твои entries и bot¦n, но используешь pack для labels. pack по умолчанию posiciona widgets, выровненные в колонне наверху во внизу.

Есть несколько способов это делать, но ты можешь продолжать mÃ: xima 'дели и vencerÃ: s'. Чтобы выравнивать label и entries обычно используют grid . Ты можешь использовать контейнер (один Frame), что contendrÃ: два Entry и два Label и потом posicionas Frame соответствующим образом.

Два наблюдения:

  • ты не должен использовать, чтобы импортировать модель:

    from tkinter import *
    

    Может, что в твоей программе ты не имел больших проблем по отношению к существу pequeño, но я гарантирую тебя, что ты можешь встречаться с неприятными сюрпризами, использовав пространные и сложные книжные магазины. В Вашем месте используй что-то как:

    import tkinter as tk
    
  • не советовал тебе использовать в том же l¦-nea инстанцию widget и Вашей позиции используя grid, place или pack, если ты делаешь:

    btnSave=tk.Button(window,text="Save",command=Entryquestion,).place(x=130,y=200)
    

    Сейчас btnSave не инстанция tkinter.Button но его None, возврат método place. Если бы ты сейчас захотел использовать переменную btnSave, чтобы менять, например, текст bot¦n, ты не смог бы. В Вашем месте, отдели l¦-neas:

    btnSave=tk.Button(window,text="Save",command=Entryquestion,)
    btnSave.place(x=130,y=200)
    

c¦digo podr¦, - который должен быть небольшим количеством as¦-:

import tkinter as tk

def Entryquestion():
    pass

#Creando una ventanta principal
window=tk.Tk()
window.geometry("500x300+100+100")
window.title("Question Editor")

#Creamos un frame como contenedor
frame = tk.Frame(window)

#Creando un campo de texto para question
entryQuestion=tk.StringVar()
entryQuestion.set("")
txtQuestion=tk.Entry(frame,textvariable=entryQuestion)
txtQuestion.grid(row=0, column=1)

#Creando un campo de texto para answer
entryAnswer=tk.StringVar()
entryAnswer.set("")
txtAnswer=tk.Entry(frame,textvariable=entryAnswer)
txtAnswer.grid(row=2, column=1)

#Creando un label para el campo de texto "question"
labelQuestion = tk.Label(frame, text="Question", padx=10 )
labelQuestion.grid(row=0, column=0, sticky=tk.W)

#Creando un label para el campo de texto "answer"
labelAnswer = tk.Label(frame, text="Answer", padx=10 )
labelAnswer.grid(row=2, column=0, sticky=tk.W)

#Definimos un tamaño mínimo de la fila central delgrid para que quede un espacio entre cada entry y posicionamos el frame
frame.grid_rowconfigure(1, minsize=10)
frame.place(x=0,y=140)

#Creando un botón para guardar pregunta y respuesta
btnSave=tk.Button(window,text="Save question and answer",command=Entryquestion,font=("Agency FB",14))
btnSave.place(x=130,y=200)

#Iniciamos el mailoop
window.mainloop()

Мы Получаем что-то как:

introducir la descripción de la imagen aquí

3
ответ дан 30.10.2019, 03:16

Теги

Похожие вопросы