(Python Tkinter) Почему перестали появляться мои кнопки при попытке добавить полосу прокрутки? - PullRequest
0 голосов
/ 26 марта 2020

Я пытался написать программу, в которой каждая отдельная фотография была бы показана из файла, обозначенного Button, который работал до тех пор, пока я не попытался добавить Scrollbar к Canvas на случай, если кнопок больше, чем экран может соответствовать. Но по какой-то причине все кнопки исчезли с экрана, и полоса прокрутки была бы маленькой, посередине экрана и совсем не там, где я хотел. Строки, которые я использовал для создания полосы прокрутки, работали в другой части программы раньше, но теперь это не так. Я включил картинки того, как это выглядит до и после изменения BeforeAfter

photoMenu=tk.Tk()
photoMenu.title("Insta-Copy")
photoMenu.geometry("1720x1080")
photoMenu.resizable(0,0)

photoCanvas=tk.Canvas(photoMenu,width=1720,height=900)
vsb=tk.Scrollbar(photoCanvas)
vsb.pack(side=RIGHT,fill=Y)

photoCanvas.config(yscrollcommand=vsb.set)

photoCanvas.pack()
vsb.config(command=photoCanvas.yview)

x=-100
y=50
y2=165

for file in pathList:
    x+=150

    fileName=file.replace(sourceDirectory+"/","")
    with open ("InstaCopyFiles.txt") as fileList:
        if file in fileList.read(): #File has already been copied before
           tk.Label(photoCanvas,text=fileName,fg="red").place(x=x,y=y2)
        else:
           tk.Label(photoCanvas,text=fileName).place(x=x,y=y2)


     photoButton=tk.Button(photoCanvas,image=photo,command=partial(photoSelected,file))
     photoButton.image=photo    
     photoButton.place(x=x,y=y)

     if x>=1500:
         x=-100
         y+=140
         y2+=140

1 Ответ

0 голосов
/ 26 марта 2020

Они исчезли, потому что вы поместили полосу прокрутки внутри холста. Это, в сочетании с тем фактом, что вы не использовали никаких опций при вызове pack, заставляет холст сжиматься до полосы прокрутки.

Нельзя размещать полосы прокрутки внутри холста. Обычно вы используете рамку и делаете холст и полосы прокрутки дочерними для рамки.

Кроме того, немного необычно помещать изображение в метку, а затем вызывать place на метке для установки это внутри холста. Холст изначально поддерживает изображения, поэтому вы можете поместить их прямо на холст. Если вы используете place, вы не сможете прокручивать изображения, потому что вы можете прокручивать только элементы холста (элементы, созданные с помощью методов create_*).

...