unknown886 2022-01-16 20:30 采纳率: 53.3%
浏览 38
已结题

如何添加修改图片大小的功能按钮

1.左上角我用的是文字,我需要插入一个长条图片,作为一个简单的说明!

img

2.添加一个调节二维码大小的功能按钮或者选择
在二维码图片的下方

img

from tkinter import *  # 引入tkinter库
from tkinter import filedialog
from PIL import Image  # 引入PIL库的Imgae子模块
from PIL import ImageTk  # 引入PIL库的ImageTk子模块
import qrcode  # 引入qrcode库
 
 
def create_qrcode(text, filename):
    """
    生成二维码图片
    """
    qr = qrcode.QRCode(
        version=None,
        error_correction=qrcode.ERROR_CORRECT_H,
        box_size=5,
        border=1
    )
    qr.make(fit=True)
    qr.add_data(text)
    # fill_color和back_color参数改变生成图片的格子颜色和背景颜色
    img = qr.make_image(fill_color="Tan", back_color="white")
    img.save(filename + '.png')
 
def save_qr():
    # 获取文本框内的内容
    text_input = t.get(0.0, "end")
    # print(text_input)
    if text_input == '\n':
        text_input = 'http://www.baidu.com'
    # 定义图片的名字为输入内容的第一个字符
    img_name = filedialog.asksaveasfilename()
    # print(img_name)
    # 生成二维码图片
    create_qrcode(text_input, img_name)
 
def callback():
    # 获取文本框内的内容
    text_input = t.get(0.0, "end")
    if text_input == '\n':
        text_input = 'http://www.baidu.com'
    # 定义图片的名字为输入内容的第一个字符
    img_name = text_input[0:1]
    # 生成二维码图片
    create_qrcode(text_input, img_name)
    # 保存二维码图片至本地
    img = Image.open(img_name + '.png')
    # 设定图片大小
    img = img.resize((320, 320))
    # 重新在窗体中显示新生成的二维码图片,覆盖刚才的图片
    img = ImageTk.PhotoImage(img)
    label.configure(image=img)
    label.image = img
 
 
if __name__ == "__main__":
    root = Tk()  # 新建窗口
    root.geometry("800x600")  # 窗口大小
    root.resizable(False, False)  # 禁止改变窗口大小
    root.title('二维码生成器')  # 窗口标题
    img = qrcode.make('https://www.baidu.com')  # 将这个网站转换为二维码图片
    img.save('d:\\hello.png')  # 保存二维码图片到本地
    img = Image.open('d:\\hello.png')  # 打开本地二维码图片
    img = ImageTk.PhotoImage(img)  # 根据本地图片生成窗体图片
    lbl = Label(root, text='名称:', font=("黑体", 14), width=5, height=1, foreground='red')  # 名称标签,前景色设红色
    lbl.place(x=15, y=10)  # 二维码图片位置
    t = Text(root, width=36, height=15, font=("黑体", 16))  # 在窗体嵌入输入框
    t.place(x=15, y=45)  # 输入框的位置
    btn1 = Button(root, text='点我生成二维码', width=20, font=("黑体", 14), command=callback)  # 按钮,按钮相应函数 callback
    btn1.place(x=120, y=480)  # 按钮位置
 
    btn2 = Button(root, text='保存', width=20, font=("黑体", 14), command=save_qr)  # 按钮2
    btn2.place(x=480, y=480)  # 按钮位置
 
    label = Label(root, image=img, width=400, height=400)  # 嵌入二维码图片
    label.place(x=400, y=0)  # 二维码图片位置
    root.mainloop()
 
 
 

  • 写回答

2条回答 默认 最新

  • 陈年椰子 2022-01-16 23:18
    关注

    大概写了个示范, 图片大小用 大中小 的radio 按钮选择, 左上角自己改相关图片及大小。

    img

    
    from tkinter import *  # 引入tkinter库
    from tkinter import filedialog
    from PIL import Image  # 引入PIL库的Imgae子模块
    from PIL import ImageTk  # 引入PIL库的ImageTk子模块
    import qrcode  # 引入qrcode库
    
    
    def create_qrcode(text, filename):
        """
        生成二维码图片
        """
        qr = qrcode.QRCode(
            version=None,
            error_correction=qrcode.ERROR_CORRECT_H,
            box_size=5,
            border=1
        )
        qr.make(fit=True)
        qr.add_data(text)
        # fill_color和back_color参数改变生成图片的格子颜色和背景颜色
        img = qr.make_image(fill_color="Tan", back_color="white")
        img.save(filename + '.png')
    
    def save_qr():
        # 获取文本框内的内容
        text_input = t.get(0.0, "end")
        # print(text_input)
        if text_input == '\n':
            text_input = 'http://www.baidu.com'
        # 定义图片的名字为输入内容的第一个字符
        img_name = filedialog.asksaveasfilename()
        # print(img_name)
        # 生成二维码图片
        create_qrcode(text_input, img_name)
    
    def callback():
        # 获取文本框内的内容
        text_input = t.get(0.0, "end")
        if text_input == '\n':
            text_input = 'http://www.baidu.com'
        # 定义图片的名字为输入内容的第一个字符
        img_name = text_input[0:1]
        # 生成二维码图片
        create_qrcode(text_input, img_name)
        # 保存二维码图片至本地
        img = Image.open(img_name + '.png')
        # 设定图片大小
        size = (320, 320)
        if var.get() == "A":
            size = (320, 320)
        elif var.get() == "B":
            size = (200, 200)
        else:
            size = (160, 160)
    
    
        img = img.resize(size)
        # 重新在窗体中显示新生成的二维码图片,覆盖刚才的图片
        img = ImageTk.PhotoImage(img)
        label.configure(image=img)
        label.image = img
    
    def print_selection():
        print( 'u have select:' + var.get())
    
    if __name__ == "__main__":
        root = Tk()  # 新建窗口
        root.geometry("800x600")  # 窗口大小
        root.resizable(False, False)  # 禁止改变窗口大小
        root.title('二维码生成器')  # 窗口标题
        img = qrcode.make('https://www.baidu.com')  # 将这个网站转换为二维码图片
        img.save('d:\\hello.png')  # 保存二维码图片到本地
        img = Image.open('d:\\hello.png')  # 打开本地二维码图片
        img = ImageTk.PhotoImage(img)  # 根据本地图片生成窗体图片
    
        infoimg = Image.open('info.png')
        img_show = ImageTk.PhotoImage(infoimg)
        img_label = Label(root, image=img_show, width=200, height=40)  # 图片
        img_label.place(x=10, y=0)  #
    
        lbl = Label(root, text='名称:', font=("黑体", 14), width=5, height=1, foreground='red')  # 名称标签,前景色设红色
        lbl.place(x=15, y=50)  # 二维码图片位置
        t = Text(root, width=36, height=15, font=("黑体", 16))  # 在窗体嵌入输入框
        t.place(x=15, y=85)  # 输入框的位置
        btn1 = Button(root, text='点我生成二维码', width=20, font=("黑体", 14), command=callback)  # 按钮,按钮相应函数 callback
        btn1.place(x=120, y=480)  # 按钮位置
    
        btn2 = Button(root, text='保存', width=20, font=("黑体", 14), command=save_qr)  # 按钮2
        btn2.place(x=480, y=480)  # 按钮位置
    
        label = Label(root, image=img, width=400, height=400)  # 嵌入二维码图片
        label.place(x=400, y=0)  # 二维码图片位置
    
        var = StringVar()
        r1 = Radiobutton(root, text='大', variable=var, value='A', command=print_selection)
        r1.place(x=450, y=380)
        r2 = Radiobutton(root, text='中', variable=var, value='B', command=print_selection)
        r2.place(x=530, y=380)
        r3 = Radiobutton(root, text='小', variable=var, value='C', command=print_selection)
        r3.place(x=610, y=380)
        var.set("A")
    
        root.mainloop()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月18日
  • 修改了问题 1月16日
  • 创建了问题 1月16日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改