我设计了一个简单的程序,该程序在顶部框架中显示图片,并通过底部框架中“注释”标签旁边的输入框进行文本输入。如果您按Enter键,则应转到另一张图片,依此类推。它可以在运行Windows 10的计算机上完美运行。但是,当我在朋友的Mac-book上打开它时,它仅显示图片,底部框架(文本标签和输入框)未显示。我尝试最大化窗口大小,以查看是否它是隐藏的,但它不存在。是否有理由在MacOS上表现不同?另外,如果您按Enter键,则可以毫无问题地转到下一张图像。
import tkinter as tk
from PIL import ImageTk, Image
import os
from tkinter import messagebox
class imageProcessor:
def __init__(self):
self.directory = '/Users/Juan G Mendoza/Desktop/Image Processing/pics/'
self.pics = dict()
self.k = 0
self.max = 0
for filename in os.listdir(self.directory):
if(not filename[0] == '.'):
self.pics[self.k] = filename
self.k += 1
self.max = self.k
self.k = 0
#os.rename(self.directory + self.pics[self.k], self.dir + self.pics[self.k])
self.window = tk.Tk()
self.window.bind('<Return>', self.enter)
self.top_frame = tk.Frame(self.window)
self.bottom_frame = tk.Frame(self.window)
#Mount picture onto Top Frame
self.img = ImageTk.PhotoImage(Image.open(self.directory + self.pics[self.k]))
self.panel = tk.Label(self.top_frame, image = self.img)
#Mount things in Bottom Frame
self.comment_entry = tk.Entry(self.bottom_frame, width = 50)
self.note_label = tk.Label(self.bottom_frame, text = 'Notes:')
#Pack Everything
self.panel.pack(side = 'top')
self.note_label.pack(side = 'left')
self.comment_entry.pack(side = 'left')
#Pack Frames
self.top_frame.pack()
self.bottom_frame.pack()
self.window.mainloop()
def enter(self, event):
comment = self.comment_entry.get()
comment = comment.lower()
openF = open(self.directory + '/My Comments.txt', 'a')
#print('here')
if comment == 'y':
openF.write(self.pics[self.k] + '\t Good' + '\n')
elif comment == 'n':
openF.write(self.pics[self.k] + '\t Bad' + '\n')
elif comment == 'quit':
self.k = self.max
else:
openF.write(self.pics[self.k] + '\t' + comment + '\n')
openF.close()
if(self.k + 1 < self.max):
self.comment_entry.delete(0, 'end')
self.k += 1
self.img = ImageTk.PhotoImage(Image.open(self.directory + self.pics[self.k]))
self.panel.configure(image = self.img)
self.panel.update()
else:
messagebox.showinfo('Image Processor','There are no more pictures')
self.window.destroy()
test = imageProcessor()