Tkinter未在MacOS上显示所有帧

时间:2019-03-01 19:46:58

标签: python macos tkinter

我设计了一个简单的程序,该程序在顶部框架中显示图片,并通过底部框架中“注释”标签旁边的输入框进行文本输入。如果您按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()

0 个答案:

没有答案