-1
2つのウィンドウを作成しようとしています。 1つはランダムなイメージを表示し、もう1つは新しいランダムイメージに変更するボタンを持っています。現在、Display.update_image()にタイマーを置き、Display.__init__
で呼び出すと、定期的に画像を変更することができます。Tkinter親から子ウィンドウを変更する
ただし、親ウィンドウのボタンにupdate_image()
コマンドを入力しても機能しません。最初のウィンドウから2番目のウィンドウを変更することは可能ですか?
import tkinter as tk
from PIL import Image, ImageTk
import random
def top_100():
"""
Returns a list of the top 100 biggest NZ cities.
"""
file = open("Top100NZcities.csv")
cities = file.readlines()
return [city.strip() for city in cities]
class UserInt():
def __init__(self):
self.root = tk.Tk()
self.newWindow = tk.Toplevel(self.root)
self.app = Display(self.newWindow)
self.random_100_button = tk.Button(text = 'Random from top 100',
width = 50,
command = self.app.update_image())
self.random_100_button.pack()
self.root.mainloop()
class Display():
def __init__(self, master):
self.root = master
#Get the list of cities,.
self.cities = top_100()
#Set to fullscreen.
w, h = self.root.winfo_screenwidth(), self.root.winfo_screenheight()
self.root.overrideredirect(1)
self.root.geometry("%dx%d+0+0" % (w, h))
#Display initial image.
self.image_init = ImageTk.PhotoImage(Image.open("black_background.jpg"))
self.panel = tk.Label(self.root, image=self.image_init)
self.display = self.image_init
self.panel.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
def update_image(self):
"""
Replaces the screen's current image with a new random image.
"""
self.city = random.choice(self.cities)
self.image_rand = Image.open("NZ maps/{}_nz.png".format(self.city))
#Rescale image to fit window.
w, h = self.root.winfo_screenwidth(), self.root.winfo_screenheight()
self.scale_factor = h/self.image_rand.height
self.scaled_image = self.image_rand.resize(
(int(self.scale_factor * self.image_rand.width), h), Image.ANTIALIAS
)
self.image_display = ImageTk.PhotoImage(self.scaled_image)
self.panel.configure(image=self.image_display)
print(self.city)
self.display = self.image_display
def main():
app = UserInt()
if __name__ == '__main__':
main()
「機能しません」とはどういう意味ですか?プログラムはクラッシュしますか?間違いはありますか?それは間違ったイメージを表示しますか?画像が間違った場所に表示されますか? ... –
'command = self.app.update_image()'は、 'update_image()' RIGHT NOWを呼び出し、ボタンがクリックされたときに実行される関数としてその戻り値(None)を保存することを意味します。かっこを取り除いて、その結果ではなく実際の関数を渡しています。 – jasonharper
関数を 'command'として渡すことになっています。 – Goyo