2016-10-11 8 views
0

Я создаю графический интерфейс для скрипта. Сначала я разработал пустой GUI (код, показанный ниже). Изображения не показывались, но затем я искал Google и понял, что ссылки на изображение собирают мусор и фиксируют его по этой ссылке (http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm). Затем я сделал изображение глобальной переменной в GUI-скрипте, и это тоже сработало.Почему мой python tkinter GUI не показывает изображения при импорте в другой скрипт?

Этот файл называется GUI.py:

import Tkinter as tk 
import ttk 
import tkMessageBox 
import time 
from PIL import ImageTk, Image 

class StartPage(tk.Frame): 
    def __init__(self, master, text, height, width, *args, **kwargs): 
     global logo 
     tk.Frame.__init__(self, *args, borderwidth=20, **kwargs) 
     self.height = height 
     self.width = width 
     # path = "test.jpg" 
     # self.img = ImageTk.PhotoImage(Image.open(path)) 
     logo = ImageTk.PhotoImage(Image.open('test.jpg')) 
     self.picture = tk.Label(self, image=logo) 
     #self.picture.image = img 
     self.picture.pack(side = "bottom", fill = "both", expand = "yes") 
     label = tk.Label(self, text='Waiting', font=("Helvetica bold", 24)).pack() 
     label = tk.Label(self, text='Click START Button', font=("Helvetica", 16)).pack(expand=True) 
     button = tk.Button(self, text=text, font=('Helvetica', 20), 
          command=lambda: self.callback()) 
     button.pack(side="top", expand=True) 
     root.update() 
    def onlift(self): 
     root.geometry('{}x{}'.format(self.width, self.height)) 
     self.lift() 

class TestPage(tk.Frame): 
    def __init__(self, master, text, height, width, *args, **kwargs): 
     tk.Frame.__init__(self, *args, borderwidth=20, **kwargs) 
     self.height = height 
     self.width = width 
     self.state = tk.StringVar() 
     self.label = tk.Label(self, textvariable=self.state, font=("Helvetica", 16)).pack() 
     self.progress = ttk.Progressbar(self, orient='horizontal', length=1000, mode='determinate') 
     self.progress.pack() 
     path = 'connect.jpg' 
     img = ImageTk.PhotoImage(Image.open(path)) 
     self.picture = tk.Label(self, text='test image', image=img) 
     self.picture.image = img 
     self.picture.pack() 
     root.update() 
    def onlift(self): 
     global p1 
     root.geometry('{}x{}'.format(self.width, self.height)) 
     self.lift() 
     self.progress["value"] = 0 
     self.state.set('Running...') 
     root.update() 
     time.sleep(1) 
     self.progress["value"] = 50 
     root.update() 
     confirm = tkMessageBox.askyesno(message='ON?', icon='question', title='Confirmation') 
     #print confirm 
     if confirm: 
      print 'Confirmed' 
      self.progress["value"] = 100 
      self.state.set('PASSED!') 
      root.update() 
      tkMessageBox.showinfo(title='Test Passed',message='PASS') 
      self.label 

     else: 
      self.state.set('Test FAILED!') 
      root.update() 
      tkMessageBox.showinfo(title='Test Failed',message='FAIL',icon='warning') 
     p1.onlift() 


class App(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     global p1 
     tk.Frame.__init__(self, *args, **kwargs) 

     p1 = StartPage(self, 'START', height=root.winfo_screenheight(), width=root.winfo_screenwidth()) 
     p2 = TestPage(self, 'blank', height=root.winfo_screenheight(), width=root.winfo_screenwidth()) 
     p1.callback = p2.onlift 
     p2.callback = p1.onlift 

     p1.place(x=0, y=0, relwidth=1, relheight=1) 
     p2.place(x=0, y=0, relwidth=1, relheight=1) 

     p1.onlift() 

global p1 
global p2 
global logo 
global connectimg 

root = tk.Tk() 
root.title('GUI') 
app = App(root) 
root.update() 

Моя проблема теперь, когда я импортировать этот GUI.py в мой фактический тестовый сценарий я снова потерять изображения. Я попытался загрузить изображения в этом скрипте и передать ссылку на графический интерфейс, но это не сработало.

import GUI 

Это, как я могу изменить текст метки и значение прогресса бара от моего сценария:

GUI.p2.state.set('Running') 
GUI.p2.progress["value"] = 50 
GUI.root.update() 

Если я запускаю графический интерфейс с основным циклом() сама по себе изображениям отображаются в порядке. Когда я запускаю его как импортированный модуль из второго скрипта, он не отображает изображения. Что я делаю не так?

+0

показать тестовый скрипт, чтобы мы могли запускать весь код. – furas

+0

Создает ли ваш скрипт сценарий тоже виджеты? Вы можете использовать только один экземпляр 'Tk' за один раз. –

+0

@furas Извините, не могу передать этот код ... – aroushan

ответ

-1

Где ваши файлы изображений? Вы не забыли поместить изображения в папку проекта? Убедитесь, что ваш путь не отличается.

+0

Файлы изображений находятся в том же каталоге, что и GUI.py, и основной скрипт. – aroushan

 Смежные вопросы

  • Нет связанных вопросов^_^