Есть ли способ расширить окно GUI в Python? - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь сделать простой генератор предложений.Код работает, но я просто хочу знать, есть ли какие-нибудь способы расширить окно ввода GUI?

Вот как это выглядит:

enter image description here

Любая помощь будет оценена.

import tkinter as tk
from tkinter import Entry
import random
window = tk.Tk()

def movingVerb():
    verbs = ["goes to", "walks through", "runs through"]
    moveVerb = random.choice(verbs)
    return moveVerb
def anObject():
    anObject = objectEntry.get()
def Generate():
    UserName = nameEntry.get()
    moveVerb = movingVerb()
    place = placeEntry.get()
    noun = objectEntry.get()
    sentence = UserName + " " + moveVerb + " a " + place + " and finds a " + noun + " ." 
    result.delete(0, tk.END)
    result.insert(0, sentence)

UserNameLabel = tk.Label(window, text="Enter a name: ")
nameEntry = tk.Entry(window)
anObjectLabel = tk.Label(window,text="Enter an object: ")
objectEntry = tk.Entry(window)
placeLabel = tk.Label(window, text="Enter a place: ")
placeEntry = tk.Entry(window)
button = tk.Button(window, text="Generate story", command=Generate)
result = tk.Entry(window)

UserNameLabel.pack()
nameEntry.pack()
anObjectLabel.pack()
objectEntry.pack()
placeLabel.pack()
placeEntry.pack()
button.pack()
result.pack()
window.mainloop()

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Если вы хотите расширить виджеты при изменении размера окна, вы можете использовать expand и fill в pack() в различных комбинациях. Все зависит от того, какой элемент вы хотите расширить и в каком направлении.

.pack(fill='x')
.pack(fill='y')
.pack(fill='both')
.pack(expand=True, fill='x')
.pack(expand=True, fill='y')
.pack(expand=True, fill='both')

enter image description here


Если вы хотите изменить размер окна, чтобы увидеть весь новый текст в Entry, вы можете использовать widget.configure(width=...). Запись использует количество символов в качестве ширины.

Вы можете использовать длину предложения, чтобы изменить ширину

result.configure(width=len(sentence))

или оставить ширину не менее 20 символов

length = max(20, len(sentence))
result.configure(width=length)

Полный код

import tkinter as tk
import random

# --- functions ---

verbs = ["goes to", "walks through", "runs through"]

def generate():
    user_name = name_entry.get()
    move_verb = random.choice(verbs)
    place = place_entry.get()
    noun = object_entry.get()
    sentence = '{} {} a {} and finds a {}.'.format(user_name, move_verb, place, noun)
    result.delete(0, 'end')
    result.insert(0, sentence)
    length = max(20, len(sentence))
    result.configure(width=length)

# --- main ---

window = tk.Tk()

user_name_label = tk.Label(window, text="Enter a name: ")
name_entry = tk.Entry(window)
object_label = tk.Label(window,text="Enter an object: ")
object_entry = tk.Entry(window)
place_label = tk.Label(window, text="Enter a place: ")
place_entry = tk.Entry(window)
button = tk.Button(window, text="Generate story", command=generate)
result = tk.Entry(window)

user_name_label.pack(expand=True, fill='both')
name_entry.pack(fill='both')
object_label.pack(expand=True, fill='both')
object_entry.pack(fill='both')
place_label.pack(expand=True, fill='both')
place_entry.pack(fill='both')
button.pack(expand=True, fill='both')
result.pack(fill='both')

window.mainloop()
0 голосов
/ 05 мая 2019

используйте место вместо колоды, и вы можете сделать этот сладкий метод здесь.

 placeLabel.place(relwidth=0.25, relheight=0.90)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...