2017-02-15 8 views
1

IMAGE: --->ScreenShot of the problemTkinter, изображения смешиваются, когда множественное окно запущена

IMAGE: --->How it is meant to look:

В первой гиперссылке выше я приложил скриншот проблемы.

При запуске окон, которые подключены кнопкой, изображение в окне, которое запускается из первого окна, отображается в первом окне, а не только в открывшемся новом окне.

Сначала я думал, что python может запутаться, потому что имя файла совпадает. (Это было не так, как я использовал немного другое изображение с другим именем файла.

Я пытался так много способов, и он просто не работает.

Непосредственно ниже этой линии код для первой окно:

#----Main Menu---- 
root_menu = Tk() 
root_menu.title("Warehouse Inventory Control System") 
root_menu.configure(bg = "black") 


photo = PhotoImage(file="logo.gif") 
photoLabel = Label(image=photo) 
photoLabel.image = photo 
photoLabel.grid(row=1, column=3,columnspan = 4, sticky = N) 

Title_Screen = Label(root_menu, 
        text="Welcome to the SsangYong\n Warehouse Inventory  Control System", 
        fg="grey", 
        bg="black", 
        font="Helevetica 25 bold", 
        pady = "50", 
        padx = "50", 
        ).grid(row=2, column=3) 


Search_Inventory = Button(root_menu, 
          text = "Search Inventory", 
          command=Search_Inventory, 
          fg = "Blue", 
          bg = "Grey", 
          bd = 2, 
          font="Helevetica 12 bold", 
          height = 1, 
          width = 50, 
         ).grid(row=16, column=3,pady = 25,padx = 25,) 

Add_Stock = Button(root_menu, 
       text = "Add New Items", 
       command = Add_To_Database, 
       fg = "Blue", 
       bg = "Grey", 
       bd = 2, 
       font="Helevetica 12 bold", 
       height = 1, 
       width = 60, 
       ).grid(row=15, column=3,pady = 25,padx = 25,) 

Print_Report = Button(root_menu, 
       text = "Print Stock Report", 
       fg = "Blue", 
       bg = "Grey", 
       bd = 2, 
       font="Helevetica 12 bold", 
       height = 1, 
       width = 70, 
       ).grid(row=17, column=3,pady = 25,padx = 25,) 


Help_Button = Button(root_menu, 
        text = "Help", 
        command=Help_PDF, 
        fg = "Red", 
        bg = "Black", 
        height = "1", 
        bd = "2", 
        font = "Helevetica 20 bold", 
        width = "4", 
        ).grid(row=1, column=3,rowspan = 2, sticky= NE) 
root_menu.mainloop() 

и вот код для второго окна

def Search_Inventory(): 
#---Search Window---- 
root_search = Tk() 
root_search.title("Warehouse Inventory Control System") 
root_search.configure(bg = "black") 

#----Title displayed under the company logo on the first window---- 
Title_Screen = Label(root_search, 
        text="Warehouse Inventory Control System", 
        fg="grey", 
        bg="black", 
        font="Helevetica 25 bold", 
        pady = "50", 
        padx = "50", 
        ).grid(row=3, column=4) 

#----Interactive Input Boxes for the User---- 

#----Label to Notify what is needed in the entry box---- 

PN_Info_Label = Label(root_search, 
        text = "Part Number:", 
        fg="white", 
        bg="black", 
        font="Helevetica 15 bold", 
        padx = 50, 
        ).grid(row=14, column=3, rowspan = 2) 

#----Input Box for Part Number 

PN_Display = StringVar() 
Input_PartNumber = Entry(root_search, 
         textvariable=PN_Display, 
         fg = "blue", 
         font = "Helevtica 25 bold", 
         ).grid(row=14, column=4) 

#----A button that will proceed to the next part of the program---- 

Search_Button = Button(root_search, 
         text = "Search Inventory", 
         fg = "Blue", 
         bg = "Grey", 
         bd = 2, 
         font="Helevetica 15 bold", 
         command=lambda:Search_Prod(PN_Display.get()), 
         height = 1, 
         width = 15, 
         ).grid(row=16, column=4,pady = 25,padx = 25,) 

#----Information regarding how to enter the part number--- 
Info = Label(root_search, 
      text="Please Use Capitals to Enter Part Number", 
      fg= "red", 
      bg = "black", 
      font = "helevetica 12 bold", 
      ).grid(row = 15, column = 4) 
#----Adding the company logo to the first window---- 

photo = PhotoImage(file="image.gif") 
photoLabel = Label(image=photo) 
photoLabel.image = photo 
photoLabel.grid(row=1, column=4, pady = 10) 

#----Linking the Help Document---- 

Help_Button = Button(root_search, 
        text = "Help", 
        command=Help_PDF, 
        fg = "Red", 
        bg = "Black", 
        height = "1", 
        bd = "2", 
        font = "Helevetica 20 bold", 
        width = "4", 
        ).grid(row=0, column=5, pady= 10,padx = 50, sticky = E) 

#----Saying who the program was made by---- 

Credits = Label(root_search, 
       text = "Created By: Me", 
       fg = "White", 
       bg = "Black", 
       font = "Helevetica 10 underline", 
       ).grid(row = 19, column = 5) 
#To Make Sure that the window doesn't close 
root_search.mainloop() 
+0

Если оно отображается не в том окне, это связано с тем, что у него неправильный родитель. Посмотрите внимательно на свой код. –

+0

если по родительскому слову вы хотите указать фактическое окно в коде для отображения изображения, я попробовал это, и он все равно ничего не изменил –

ответ

0

В своем вопросе вы показываете это для «второго окна»:.

def Search_Inventory(): 
    #---Search Window---- 
    root_search = Tk() 
    ... 
    photoLabel = Label(image=photo) 

Есть две проблемы с вышеуказанным кодом. Например, вы создаете второй экземпляр Tk. Вы не должны этого делать. Программа tkinter должна иметь ровно один экземпляр Tk. Если вам нужны дополнительные окна, вам нужно создать экземпляры Toplevel.

Вторая проблема заключается в том, где вы создаете Label - вы пренебрегаете тем, чтобы дать ему родительский элемент, поэтому он, по-видимому, не соответствует исходному окну. Вам необходимо изменить эту последнюю строку следующим образом:

photoLabel = Label(root_search, image=photo) 
+0

спасибо за ваш ответ, как добавить родителя к нему? –

+0

@MikiAmeryk: то же самое, что вы добавили родителя ко всем создаваемым виджетам. 'Ярлык (root_search, image = photo)' –

+0

Большое вам спасибо! –