#python-3.x #tkinter
#python-3.x #tkinter
Вопрос:
Итак, я пытаюсь создать сетку изображений. Это связано с некоторыми другими вопросами, которые у меня были, но с тех пор я улучшил свой код, чтобы очистить его, но теперь я получаю ошибки при попытке загрузить пути к изображениям. Все изображения хранятся в папке с именем cardImages. Я знаю, что проблема кроется где-то в PhotoImage (), но пока не смог разобраться. Текущий вывод функции imageMaker равен: ./cardImages/red shaded circle1.gif
from tkinter import *
import tkinter as tk
from Deck import Deck
#nCards = deckOfSETs.getNumberOfCards()
# Create for loop to create all possible card combos
#for i in range(nCards):
#print(deckOfSETs.getCard(i).getFileName())
root = tk.Tk()
# Init a Deck
deckOfSETs = Deck()
# Utility Function
def imageMaker(deck, cardNum, rootPath = './cardImages/'):
cardFile = deck.getCard(cardNum).getFileName()
print(rootPath cardFile)
return PhotoImage(file = rootPath cardFile)
# Build the grid iterating over rows and columns
nRows = 4
nCols = 3
counter = 0
for r in range(nRows):
for c in range(nCols):
btn = tk.Button(padx=50, pady=50, image = imageMaker(deckOfSETs, counter))
btn.grid(row = r, column=c)
counter = 1
root.mainloop()
Вот результат, который я сейчас получаю
Текущий вывод
И вот пример того, каким я хочу, чтобы это был результат, который я хочу
Редактировать: я понял, что, вероятно, упустил важную информацию. У меня есть 2 класса, которые создают изображения, а затем помещают их в «колоду» и перемешивают их. Результат моей функции imageMaker таков: ./cardImages/red solid circle1.gif
Таким образом, в нем есть все, что, по моему мнению, ему нужно, но на самом деле он не показывает изображение.
Комментарии:
1. Можете ли вы поделиться
Deck.py
файлом? Это делает его работоспособным, поэтому мы можем видеть, что происходит.2. Вам нужно сохранить ссылку на изображение для каждой кнопки.
Ответ №1:
вы создаете кнопку в цикле for , но присваиваете ей одну переменную ‘btn’. Это не очень хорошая практика измените код, как показано ниже, и проверьте
nRows = 4
nCols = 3
counter = 0
def createButton():
global counter
counter =1
return Button(root,padx=50, pady=50, image = imageMaker(deckOfSETs, counter))
buttons=[[createButton() for c in range(nCols)] for r in range(nRows) ]
for r in range(nRows):
for c in range(nCols):
buttons[r][c].grid(row = r, column=c)
но я не уверен, что это проблема