【问题标题】:Tkinter gui stops functioning when adding frame widget添加框架小部件时,Tkinter gui 停止运行
【发布时间】:2015-08-05 20:14:28
【问题描述】:

这是我在一个项目中使用的一些代码,它非常简单,目前还不能正常工作。我在使用框架小部件时遇到问题。现在,当我运行代码时,什么也没有发生,但是如果我删除有关框架和滚动条的行,并将列表框/画布小部件父级更改为“root”而不是“frame”,则代码可以工作。我在网上查看了很多示例,但我不明白为什么当我尝试将所有内容放在框架而不是根窗口中时没有出现 gui 窗口......?谢谢!

使用 python 2.7。

import pymongo
import glob, os
import Tkinter
from Tkinter import *
from PIL import Image, ImageTk

root = Tkinter.Tk()
root.title("keyBuilder")
frame = Frame(root, width = 630, height = 400)

groupMenu = Listbox(frame)
groupMenu.config(width = 30)
groupMenu.insert(END, "Group 1")
groupMenu.insert(END, "Group 2")
groupMenu.insert(END, "Group 3")

yscrollbar = Scrollbar(frame)
yscrollbar.grid(row=0, column=1, sticky=N+S)

gallery = Canvas(frame, width = 600, height = 400, yscrollcommand = yscrollbar.set)

path = r'/Users/Sam/Desktop/keynoteProject/slideIcons'
COLUMNS = 6
image_count = 0

for infile in glob.glob(os.path.join(path, '*.jpeg')):
    image_count += 1
    r, c = divmod(image_count-1, COLUMNS)
    im = Image.open(infile)
    resized = im.resize((100, 100), Image.ANTIALIAS)
    tkimage = ImageTk.PhotoImage(resized)
    myvar = Label(gallery, image=tkimage)
    myvar.image = tkimage
    myvar.grid(row=r, column=c)

groupMenu.pack(side = LEFT, fill = Y)
gallery.pack(side = RIGHT)
frame.pack()

root.mainloop()

如果有帮助,此代码有效:

import pymongo
import glob, os
import Tkinter
from Tkinter import *
from PIL import Image, ImageTk

root = Tkinter.Tk()
root.title("keyBuilder")

groupMenu = Listbox(root)
groupMenu.config(width = 30)
groupMenu.insert(END, "Group 1")
groupMenu.insert(END, "Group 2")
groupMenu.insert(END, "Group 3")

gallery = Canvas(root, width = 600, height = 400)

path = r'/Users/Sam/Desktop/keynoteProject/slideIcons'
COLUMNS = 6
image_count = 0

for infile in glob.glob(os.path.join(path, '*.jpeg')):
    image_count += 1
    r, c = divmod(image_count-1, COLUMNS)
    im = Image.open(infile)
    resized = im.resize((100, 100), Image.ANTIALIAS)
    tkimage = ImageTk.PhotoImage(resized)
    myvar = Label(gallery, image=tkimage)
    myvar.image = tkimage
    myvar.grid(row=r, column=c)

groupMenu.pack(side = LEFT, fill = Y)
gallery.pack(side = RIGHT)

root.mainloop()

【问题讨论】:

  • 能贴出真实代码吗?您没有在此处指定 root
  • 我的错,复制/粘贴时漏掉了一行。固定!
  • 问题似乎出在滚动条上。没有它,它工作正常。似乎混合packgrid 布局在这里是个问题...

标签: python tkinter tkinter-canvas


【解决方案1】:

问题是您将packgrid 混合在同一个容器中。您只能将一个或另一个用于共享一个共同父级的所有小部件。 groupMenuyscrollbarcanvas 都是 frame 的子代。 yscrollbar 使用 grid 但其他人使用 pack

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多