私は2枚の写真を比較するオプションを持つアプリを作っています。私は画面の左側にリストボックスを置き、画面の右側には2つの写真の場所を置いています。リストボックスの下には、特定のタイトルの下に画像を配置するための3つのボタンがあります(図1または図2)。それは動作しますが、私は1枚の写真をPic 1とPic 2の両方に置くことができます。写真を1つ選択してPic 1の下に置き、別の写真を選択してPic 2の下に置くと、最初の写真が消えます。同じTkinter Toplevel()ウィンドウに2つの画像を表示するには
私の問題をよりよく理解するために、ここに私のアプリからの写真閲覧機能があります。前の関数で
from Tkinter import *
import tkMessageBox
from PIL import ImageTk, Image
def photo_browse():
def add_photo (screen, column_num):
if not "pic" in globals():
tkMessageBox.showerror ("Error!", "No picture selected!")
screen.lift()
else:
screen.image = pic
can = Label (screen, image = pic)
can.grid (row = 0, column = column_num)
Label (screen, text = chosen_photo).grid (row = 1, column = column_num)
def selection_listbox (evt):
global chosen_photo
chosen_photo = str (photo_listbox.get (photo_listbox.curselection()))
image_location = "Pics/" + chosen_photo
global pict
pict = Image.open (image_location)
global pic
pic = ImageTk.PhotoImage (pict)
import glob
photo_browse_screen = Toplevel()
photo_browse_screen.title ("Photo browse")
photo_browse_screen.geometry ("1000x600")
photo_browse_screen.resizable (0, 0)
photo_listbox = Listbox (photo_browse_screen, width = 50, height = 35)
photo_listbox.grid (columnspan = 3)
photo_listbox.bind ('<<ListboxSelect>>', selection_listbox)
name_list = glob.glob ("Pics/*.jpg")
name_list = [i [6:] for i in name_list]
name_list.sort()
n = 1
m = 0
for i in name_list:
photo_listbox.insert (n, name_list [m])
n += 1
m += 1
Button (photo_browse_screen, text = "PIC 1", command = lambda: add_photo (photo_browse_screen, 4)).grid (row = 1, column = 0)
Button (photo_browse_screen, text = "PIC 2", command = lambda: add_photo (photo_browse_screen, 5)).grid (row = 1, column = 1)
Button (photo_browse_screen, text = "EXIT", command = photo_browse_screen.destroy).grid (row = 1, column = 2)
can_pic_1 = Label (photo_browse_screen, text = "Pic 1", font= "-weight bold")
can_pic_1.grid (row = 0, column = 4, padx = (200, 100), sticky = N)
can_pic_2 = Label (photo_browse_screen, text = "Pic 2", font= "-weight bold")
can_pic_2.grid (row = 0, column = 5, padx = (100, 150), sticky = N)
root = Tk()
root.title ("Main menu")
root.geometry ("1000x600")
root.resizable (0, 0)
main_menu = Menu (root)
photos_menu = Menu (main_menu, tearoff = 0)
main_menu.add_cascade (label = "Photos", menu = photos_menu)
photos_menu.add_command (label = "Browse photos", command = photo_browse)
root.config (menu = main_menu)
root.mainloop()
彼らは完全にこのウィンドウ内に収まるように、(写真を追加)私は308x440の寸法に写真のサイズを変更します。
私のコードを確認したところ、global
という変数がこの問題を引き起こしていることはほぼ肯定的です。誰かが代替策を提供できるのであれば、感謝します。
せずに説明したのと同じ問題は、あなたがフレームのような別々の容器にそれらを入れてみました後にリストに何もする必要はありませんか? –
私はしていません...どうすればいいですか?限り、私が知っているように、フレームには、画像を置くオプションがありません... – mdenci