Альтернатива текстовому полю tkinter (вставка StringVar)? - PullRequest
0 голосов
/ 24 октября 2019

Я очень новичок в Python (кодирование вообще в этом отношении) и этот сайт. Я делаю небольшую программу Dice Roll и хочу отображать результаты каждого броска в текстовом поле (запись или метка) как своего рода «История бросков». Я очень визуально ориентированный ученик, и, хотя у меня есть свой код, я подумал, что мне было бы легче передать мой вопрос через визуальное представление, так как у меня еще нет языка, чтобы задать конкретный вопрос, так что здесь:

https://imgur.com/WQAt7GH

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

Поэтому мойВопрос в том, возможно ли это даже с виджетами tkinter, или я должен пойти по этому пути другим путем, например, через другую структуру GUI?

Извините, это, вероятно, очень расплывчатый или абстрактный вопрос, но любая помощьбудет принята с благодарностью! Спасибо!

from random import randrange
import tkinter as tk
from tkinter import *

def click():
    D20roll.set(randrange(1,21))
    D4roll.set('')
    D6roll.set('')
    D8roll.set('')
    D10roll.set('')
    D12roll.set('')
    D100roll.set('')

D20roll = StringVar()

DR = tk.Tk()

d20button = tk.Button(DR, command=click)
d20label = tk.Label(DR, textvariable=D20roll)
history = tk.Label(DR, bg="#525252", textvariable=D20roll)

DR.mainloop()

1 Ответ

0 голосов
/ 24 октября 2019

используйте список в Tkinter, чтобы добавить столько элементов, сколько вы хотите

lb=Tk.Listbox(DR)
lb.insert(1,first_result)
lb.insert(2,second_result)

вы можете использовать вставку в цикле, вы также можете удалить предыдущие записи, если хотите, чтобы отображался только номер истории.

Редактировать: ваш полный код будет выглядеть примерно так:

from random import randrange
import tkinter as tk
from tkinter import *

def click(history_listbox):
    D20roll.set(randrange(1,21))
    D4roll.set('')
    D6roll.set('')
    D8roll.set('')
    D10roll.set('')
    D12roll.set('')
    D100roll.set('')
    #do something with the history_listbox

D20roll = StringVar()

DR = tk.Tk()

d20label = tk.Label(DR, textvariable=D20roll)
history = tk.Listbox(DR)
d20button = tk.Button(DR, command=click, args=(history,)

DR.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...