правильный способ выбрать моноширинные шрифты в Swing

Проблема с вашим кодом заключается в том, что <RETURN> связан с start_game(), поэтому, хотя вы считаете, что просматриваете догадки и ответы, факт заключается в том, что каждый раз, когда пользователь нажимает <RETURN> в своем ответе, новый экземпляр start_game() начинается! Вместо этого нам нужно разделить настройку нового слова (aka start_game() из события <RETURN> (aka score_game()).

Я переработал ваш код в этих строках ниже - для простоты я бросил временный код в целом, так как он был разбит и не является частью вашего вопроса:

from random import shuffle
from tkinter import *

JUMBLED, PLAINTEXT = 0, 1

tv_shows = [
    'Game of Thrones', 'Friends', 'How I Met Your Mother', 'Breaking Bad', 'Narcos', 'Flash', 'Arrow', 'Big Bang Theory',
    'Walking Dead', 'Agents Of Shield', 'Blue Planet 2', 'Legion', 'The Grand Tour', 'Band Of Brothers', 'Westworld'
    'Sherlock', 'The Punisher', 'True Detective', 'Daredevil', 'Luke Cage', 'Jessica Jones', 'Iron Fist', 'Stranger Things',
    'Rick and Morty', 'House of Cards', '13 Reasons Why', 'House MD', 'Castle', 'Doctor Who', 'Dexter', 'Suits'
]

def word_jumble(word):
    letters = list(word)

    shuffle(letters)

    return "".join(letters)

def sentence_jumble(w):
    words = w.split()

    shuffle(words)

    return " ".join(word_jumble(word) for word in words)

def start_game():
    global jumble

    guess.focus_set()

    jumble = jumble_list.pop()

    word.config(text="Jumbled Words => " + jumble[JUMBLED])

def score_game(event):
    global score

    if guess.get().lower() == jumble[PLAINTEXT].lower():
        guess.delete(0, END)

        score += 1
        score_display.config(text=str(score))

        if jumble_list:
            score_display.after(500, start_game)
        else:
            main.unbind('<Return>')

shuffle(tv_shows)

jumble_list = [(sentence_jumble(title), title) for title in tv_shows]

score = 0
jumble = None  # a tuple with (jumbled, plaintext)

main = Tk()
main.title("Guess What")
main.geometry("375x200")

Label(main, text="Guess the TV show name from the jumbled one shown").pack()

word = Label(main)
word.pack()

score_display = Label(main)
score_display.pack()
score_display.config(text=str(score))

guess = Entry(main)
guess.pack()
guess.focus_set()

main.bind('<Return>', score_game)

start_game()

main.mainloop()

Вам нужно будет добавить обратно в конце игрового сценария. Вы можете ограничить количество раундов, урезая [118 ].

8
задан Jason S 6 April 2009 в 15:45
поделиться

2 ответа

Посмотрите javadoc для java.awt.Font. Кажется, что Вы можете использовать public static Font decode(String str) метод для выполнения то, что Вы хотите. В последнем абзаце javadoc для этого метода говорится:

Размер по умолчанию равняется 12, и стиль по умолчанию СТАНДАРТЕН. Если ул. не указывает допустимый размер, возвращенный Шрифт имеет размер 12. Если ул. не указывает допустимый стиль, возвращенный Шрифт имеет стиль ПЛОСКОСТИ. Если Вы не укажете допустимое имя шрифта в аргументе str, то этот метод возвратит шрифт с фамилией "Диалоговое окно". Для определения, какие имена семейства шрифтов доступны в системе используйте GraphicsEnvironment.getAvailableFontFamilyNames () метод. Если ул. является пустой, новый Шрифт возвращается с фамилией "Диалоговое окно", размер 12 и Стандартный стиль.

Если семейство шрифтов, которое Вы ищете, не будет существовать, то Вы возвратите "Диалоговое окно". Пока Вы не получаете это как возвращаемое значение, семейство шрифтов существует.

3
ответ дан 5 December 2019 в 20:18
поделиться

Я думаю, что Вы хотите это

GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

См. javadoc

2
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

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