如何使用Tkinter创建一个载入图片的窗口
本帖最后由 黎明丿晓小 于 2021-8-28 12:11 编辑主要问题:
1.“文件”选项卡中的点击“打开文件”后如何导入电脑中选中的图片,以及点击“打开文件夹”导入电脑中的一整个文件夹的图片
2.如何实现点击“打开”和“打开文件夹”选项卡后弹出整个电脑的弹窗
Tips:
1.训练、测试、检测三个选项卡的功能暂且不做
2.左边框用到Listbox列表框组件;右边黄色为Canvas画布组件,使得图片能够在画布上显示
3.选中左边列表框中的目标,右边画布能够显示对应的图片
4.最后能够给列表框加一个滚动条,上下滑动显示所有导入的目标
新人小白一枚,希望能够有大佬给出完整的代码,或者是针对那两个主要问题的代码,小人在此谢过了~{:5_110:} 我以前写过一个,跟你说的一模一样,找不到了,应该在我另一台电脑,等我一会儿给你再敲一个 qq1151985918 发表于 2021-8-28 12:51
我以前写过一个,跟你说的一模一样,找不到了,应该在我另一台电脑,等我一会儿给你再敲一个
十分感谢{:5_109:},这是导师布置的任务,这个布局是我自己臆想的,没想到有一模一样的{:10_250:} https://www.pynote.net/archives/ 叼辣条闯世界 发表于 2021-8-28 16:01
https://www.pynote.net/archives/
不好意思哈,进入页面404报错 本帖最后由 qq1151985918 于 2021-8-28 21:38 编辑
刚闲下来重新敲了一个,感觉比我以前自己写的那个简单了点,凑合吧
from tkinter import filedialog
from tkinter import *
from os import listdir
from PIL import Image, ImageTk
files = {}
img_open = None
img = None
help_text = """
1.打开文件下拉菜单
2.选择打开文件方式
3.双击列表显示图片
"""
def open_file():
file_path = filedialog.askopenfilename()
file_list.delete(0, "end")
files.clear()
name = file_path.split("/")[-1]
files = file_path
file_list.insert("end", name)
def open_dir():
dir_path = filedialog.askdirectory()
file_list.delete(0, "end")
files.clear()
target_file_name = ["jpg", "png", "gif"]
for name in listdir(dir_path):
if name.split(".")[-1].lower() in target_file_name:
files = dir_path + "/" + name
file_list.insert("end", name)
def show_view(event):
global img_open
global img
get_file = file_list.get(ACTIVE)
file_path = files
img_open = Image.open(file_path)
img_open.thumbnail((265, 390), Image.ANTIALIAS)
img = ImageTk.PhotoImage(img_open)
canvas.create_image(133, 195, anchor=CENTER, image=img)
root = Tk()
root.geometry("500x400")
root.resizable(0, 0)
root.title("标题")
menubar = Menu(root, tearoff=0)
file_menu = Menu(menubar, tearoff=0)
file_menu.add_command(label="打开", command=open_file)
file_menu.add_command(label="打开文件夹", command=open_dir)
file_menu.add_separator()
file_menu.add_command(label="退出", command=exit)
train_menu = Menu(menubar, tearoff=0)
test_menu = Menu(menubar, tearoff=0)
detect_menu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="文件", menu=file_menu)
menubar.add_cascade(label="训练", menu=train_menu)
menubar.add_cascade(label="测试", menu=test_menu)
menubar.add_cascade(label="检测", menu=detect_menu)
root.config(menu=menubar)
sb = Scrollbar(root)
sb.place(x=205, y=5, width=15, height=390)
file_list = Listbox(root, yscrollcommand=sb.set)
file_list.place(x=5, y=5, width=200, height=390)
file_list.bind("<Double-Button-1>", show_view)
sb.config(command=file_list.yview)
canvas = Canvas(root, bg="white", width=265, height=390)
canvas.place(x=225, y=5)
canvas.create_text(133, 195, anchor=CENTER, text=help_text)
root.mainloop()
qq1151985918 发表于 2021-8-28 16:41
刚闲下来重新敲了一个,感觉比我以前自己写的那个简单了点,凑合吧
十分感谢!基本功能都已经实现,你的代码我会好好研究一番,有问题再来请教~{:10_254:} qq1151985918 发表于 2021-8-28 16:41
刚闲下来重新敲了一个,感觉比我以前自己写的那个简单了点,凑合吧
你好,请问一下,怎么使得列表框、滚动条以及画布和画布中的图片随着窗口的变化而变化 顶 qq1151985918 发表于 2021-8-28 16:41
刚闲下来重新敲了一个,感觉比我以前自己写的那个简单了点,凑合吧
你好,有没有什么方法可以使得导入的图片始终与画布保持一致,并且随着窗口的变化,图片的尺寸也发生相应的改变 黎明丿晓小 发表于 2021-8-31 16:15
你好,有没有什么方法可以使得导入的图片始终与画布保持一致,并且随着窗口的变化,图片的尺寸也发生相应 ...
你刚不是回复了我那个帖子么,就在那里看看吧,那个代码就可以
页:
[1]