精华内容
下载资源
问答
  • 我一直在尝试在GUI后面传输一些脚本(使用Tkinter),到目前为止,所有打开的数据都显示Tkinter画布上(使用matplotlib绘制)。在我唯一的问题是,matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图,使用鼠标...

    我一直在尝试在GUI后面传输一些脚本(使用Tkinter),到目前为止,所有打开的数据都显示在Tkinter画布上(使用matplotlib绘制)。在

    我唯一的问题是,matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图,使用鼠标右键“缩放”)在画布中无法访问,基本上是matplotlib绘图窗口中“四角十字”的功能。在

    我认为这需要创建我自己的处理程序,但我认为必须有一种方法来使用matplotlib的默认处理程序?我还研究了this问题中提到的“滚动”画布选项,但这些选项似乎只会改变绘图区域的大小,而不是放大/缩小数据,而且我不想再添加任何按钮来操作绘图区域。在

    我目前拥有的最低限度的代码:#! /usr/bin/env python

    from Tkinter import *

    import matplotlib.pyplot as plt

    import matplotlib.backends.backend_tkagg as tkagg

    import tkFileDialog

    class App():

    def __init__(self,master):

    # VARIABLES

    self.inputFile = ""

    self.fig = plt.Figure()

    self.canvas = tkagg.FigureCanvasTkAgg(self.fig, master = master)

    self.canvas.get_tk_widget().pack()

    self.canvas.draw()

    # FRAME

    frame = Frame(master)

    master.title("MassyTools 0.1.1 (Alpha)")

    # VARIABLE ENTRIES

    # BUTTONS

    # MENU

    menu = Menu(root)

    root.config(menu = menu)

    filemenu = Menu(menu)

    menu.add_cascade(label="File", menu=filemenu)

    filemenu.add_command(label="Open Input File", command = self.openFile)

    calibmenu = Menu(menu)

    menu.add_cascade(label="Calibrate",menu=calibmenu)

    calibmenu.add_command(label="Open Calibration File", command = self.openCalibrationFile)

    calibmenu.add_command(label="Calibrate", command = self.calibrateData)

    def openFile(self):

    file_path = tkFileDialog.askopenfilename()

    setattr(self,'inputFile',file_path)

    data = self.readData()

    self.plotData(data)

    def openCalibrationFile(self):

    print "Place holder for selection of the calibration file"

    def calibrateData(self):

    print "Place holder for actual calibration"

    def readData(self):

    x_array = []

    y_array = []

    with open(self.inputFile,'r') as fr:

    for line in fr:

    line = line.rstrip('\n')

    values = line.split()

    x_array.append(float(values[0]))

    y_array.append(float(values[1]))

    return zip(x_array,y_array)

    def plotData(self,data):

    x_array = []

    y_array = []

    for i in data:

    x_array.append(i[0])

    y_array.append(i[1])

    self.fig.clear()

    self.axes = self.fig.add_subplot(111)

    self.line, = self.axes.plot(x_array,y_array)

    self.canvas.draw()

    # Stuff that is not being used now but can be useful

    """def openFile(self,number):

    name = tkFileDialog.askopenfilename()

    ops = {

    1: 'deglycoData',

    2: 'peptideFile',

    3: 'mzML'

    }

    setattr(self,ops[number],name)

    """

    # End of 'stuff'

    root = Tk()

    app = App(root)

    root.mainloop()

    展开全文
  • 我一直试图在GUI后面传递一些脚本(使用Tkinter),到目前为止,已经使得任何打开的数据都显示Tkinter画布中(使用matplotlib绘制它).我唯一的问题是matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图和鼠标右键...

    我一直试图在GUI后面传递一些脚本(使用Tkinter),到目前为止,已经使得任何打开的数据都显示在Tkinter画布中(使用matplotlib绘制它).

    我唯一的问题是matplotlib中的标准缩放/滚动(使用鼠标左键“移动”绘图和鼠标右键“缩放”)在画布中无法访问,基本上是功能matplotlib绘图窗口中的’4尖十字’.

    我认为这需要创建我自己的处理程序,但我认为必须有一种方法来使用matplotlib的默认处理程序?我也看过this问题中提到的’滚动’画布选项,但那些似乎只是改变了绘图区域的大小而不是放大/缩小数据,我也不想再添加任何按钮来操纵情节区.

    我目前最简单的代码:

    #! /usr/bin/env python

    from Tkinter import *

    import matplotlib.pyplot as plt

    import matplotlib.backends.backend_tkagg as tkagg

    import tkFileDialog

    class App():

    def __init__(self,master):

    # VARIABLES

    self.inputFile = ""

    self.fig = plt.Figure()

    self.canvas = tkagg.FigureCanvasTkAgg(self.fig, master = master)

    self.canvas.get_tk_widget().pack()

    self.canvas.draw()

    # FRAME

    frame = Frame(master)

    master.title("MassyTools 0.1.1 (Alpha)")

    # VARIABLE ENTRIES

    # BUTTONS

    # MENU

    menu = Menu(root)

    root.config(menu = menu)

    filemenu = Menu(menu)

    menu.add_cascade(label="File", menu=filemenu)

    filemenu.add_command(label="Open Input File", command = self.openFile)

    calibmenu = Menu(menu)

    menu.add_cascade(label="Calibrate",menu=calibmenu)

    calibmenu.add_command(label="Open Calibration File", command = self.openCalibrationFile)

    calibmenu.add_command(label="Calibrate", command = self.calibrateData)

    def openFile(self):

    file_path = tkFileDialog.askopenfilename()

    setattr(self,'inputFile',file_path)

    data = self.readData()

    self.plotData(data)

    def openCalibrationFile(self):

    print "Place holder for selection of the calibration file"

    def calibrateData(self):

    print "Place holder for actual calibration"

    def readData(self):

    x_array = []

    y_array = []

    with open(self.inputFile,'r') as fr:

    for line in fr:

    line = line.rstrip('\n')

    values = line.split()

    x_array.append(float(values[0]))

    y_array.append(float(values[1]))

    return zip(x_array,y_array)

    def plotData(self,data):

    x_array = []

    y_array = []

    for i in data:

    x_array.append(i[0])

    y_array.append(i[1])

    self.fig.clear()

    self.axes = self.fig.add_subplot(111)

    self.line, = self.axes.plot(x_array,y_array)

    self.canvas.draw()

    # Stuff that is not being used now but can be useful

    """def openFile(self,number):

    name = tkFileDialog.askopenfilename()

    ops = {

    1: 'deglycoData',

    2: 'peptideFile',

    3: 'mzML'

    }

    setattr(self,ops[number],name)

    """

    # End of 'stuff'

    root = Tk()

    app = App(root)

    root.mainloop()

    展开全文
  • 画布显示它们我遇到的问题是它只显示列表中的最后一个图像(在本例中是来自url2的img2),而不是第一个图像,尽管我确实看到在画布中为第一个图像添加了空白。在任何人都知道我在这里缺少什么。谢谢你的帮助。在有...

    我对这个代码有问题。

    事实上,

    1使用url下载图片

    2将这些图像保存到服务器中

    三。在画布上显示它们

    我遇到的问题是它只显示列表中的最后一个图像(在本例中是来自url2的img2),而不是第一个图像,尽管我确实看到在画布中为第一个图像添加了空白。在

    任何人都知道我在这里缺少什么。谢谢你的帮助。在

    有没有其他的方法来获取图像并在画布上显示,而不保存到本地。class open_child_window:

    def init(self, master):

    self.master = master

    master.title("Img")

    url1 ="http:img1"

    url2 ="http:img2"

    vscrollbar = Tk.Scrollbar(self.master,orient=VERTICAL)

    hscrollbar=Tk.Scrollbar(self.master,orient=HORIZONTAL)

    self.canvas= Tk.Canvas(self.master,background = "White",yscrollcommand=vscrollbar.set,xscrollcommand=hscrollbar.set)

    self.frame = Tk.Frame(self.canvas)

    vscrollbar.config(command=self.canvas.yview)

    vscrollbar.pack(side=Tk.RIGHT, fill=Tk.Y)

    hscrollbar.pack(side=Tk.BOTTOM,fill=Tk.X)

    hscrollbar.config(command=self.canvas.xview)

    self.canvas.create_window(0,0,window=self.frame, anchor='nw')

    self.list_images = []

    contents = urllib.request.urlopen(ur1l)

    plt.imshow(plt.imread(contents))

    file_name = "./img1.png"

    plt.savefig(file_name, format='png', dpi=180)

    gif1 = PhotoImage(file = file_name)

    self.canvas.image_names = gif1

    self.canvas.create_image(50, 10, image = gif1, anchor = NW)

    contents = urllib.request.urlopen(url2)

    plt.imshow(plt.imread(contents))

    file_name = "./img2.png"

    plt.savefig(file_name, format='png', dpi=180)

    gif2 = PhotoImage(file = file_name)

    self.canvas.image_names = gif2

    self.canvas.create_image(600, 700, image = gif2, anchor = NW)

    self.master.update()

    self.canvas.config(scrollregion=self.canvas.bbox("all"))

    self.canvas.pack(side="top",fill='both',expand=True)

    self.frame.pack()

    展开全文
  • 我试图让Tkinter画布上的多个对象可以使用旋转框调整大小/重新定位,其中spinbox中的值用作原始坐标的倍数。为了使事情稍微复杂一点,默认情况下,spinbox是不可见的,它在Toplevel窗口中,按下按钮时可以打开它。...

    我试图让Tkinter的画布上的多个对象可以使用旋转框调整大小/重新定位,其中spinbox中的值用作原始坐标的倍数。为了使事情稍微复杂一点,默认情况下,spinbox是不可见的,它在Toplevel窗口中,按下按钮时可以打开它。

    总结:

    我需要使用spinbox值作为乘数(或以其他方式)(它本身位于Toplevel窗口中)并在画布上“实时”显示这些更改,从而更改画布上对象的坐标。

    对于上下文,我已经包含了负责设置对象等的关键外设代码。

    UI模块的基本组成部分:

    import Canvas_1 (module for drawing shapes)

    root=Tk()

    #root geometry, title set up

    #UI then commands set up

    canvasBlank=Canvas(root, width... etc) #Blank canvas that is drawn at start

    canvasBlank.grid(row... etc)

    canvasBlank.bind('Button-3', rightclickcanvas) #Right click function that opens a popup for canvas options

    #Other misc commands, I'm using a menubar with drop down options over actual Tk.Buttons

    #'New' option in menubar has Command to create objects in UI like:

    def createObject():

    Objects=MyObjects(root, width... etc)

    Objects.grid(row... etc) #Same as layout for canvasBlank

    Objects.bind('', rightclickcanvas)

    Objectslist.append(Objects) #Stop garbage disposal and makes sure the canvas displays- MyObjects类(在单独模块中)具有类似于以下形式:

    from Coordinate_Generator import * #imports coordinate arrays

    class MyObjects(tk.Canvas)

    def __init__(self, master, **kw)

    tk.Canvas.__init__(self, master, **kw)

    self.create_oval(coordinates[0], dimensions[0], fill... etc)

    self.create_oval(coordinates[1], dimensions[1], fill... etc)

    #A series of bindings relating to moving objects under mouse clicks坐标使用'a',一个任意值来确定。我尝试乘以:

    定标器= []

    α= 70 *定标器[-1]

    这种方法似乎也不起作用,如果是这样,它也意味着可能会画出大量的画布,而我希望避免使用其他画布。我希望这证明了我需要尝试和更清楚地使用的方法。我使用给出的建议书写了一些代码,虽然它可能对我正在计划的程序的另一部分有用,但它并不完全符合我的要求。所以我已经拼凑出了这个“示范”,可以说明我正在尝试做什么。

    工作代码(解决方案)

    from Tkinter import *

    from numpy import *

    import Tkinter as tk

    scale=1

    class Demonstrator:

    def __init__(self, master=None):

    global full_coordinates, dimensions, scale

    self.master=master

    self.master.title( "Demonstrator 2")

    self.master.grid()

    self.master.rowconfigure(0, weight=1)

    self.master.columnconfigure(0, weight=1)

    self.canvas = Canvas(self.master, width=300, height=300, bg='grey')

    self.canvas.grid(row=0, rowspan=3, column=0)

    self.canvas.create_rectangle(full_coordinates[0],dimensions[0], activefill='blue', fill='red')

    self.canvas.create_rectangle(full_coordinates[1],dimensions[1], activefill='blue', fill='red')

    self.canvas.create_line(full_coordinates[0],full_coordinates[1], fill='red')

    a=9*scale

    Originx=10

    Originy=35

    coordinates1=[]

    coordinates2=[]

    x,y,i=Originx,Originy,1

    x1,y1,i=Originx,Originy,1

    while len(coordinates1)<=25:

    coordinates1.append((x,y))

    coordinates2.append((x1,y1))

    i+=1

    if i % 2 == 0:

    x,y=x+a,y

    x1,y1=x1,y1+a

    else:

    x,y=x,y+a

    x1,y1=x1+a,y1

    full_coordinates=list(set(coordinates1+coordinates2))

    b=array(full_coordinates)

    k=b+10

    dimensions=k.tolist()

    class Settings:

    def __init__(self, parent):

    top = self.top = tk.Toplevel(parent)

    self.top.title('Settings')

    self.spinbox_Label= tk.Label(top, text='Change Scale Factor?')

    self.spinbox_Label.grid(row=0, column=0, columnspan=2)

    self.spinbox_Label= tk.Label(top, width=30, text='Scale factor:')

    self.spinbox_Label.grid(row=1, column=0)

    self.spinbox= tk.Spinbox(top, from_=1, to=10, increment=0.1, command=self.change)

    self.spinbox.grid(row=1, column=1)

    def change(self):

    global scale

    scale=float(self.spinbox.get())

    MG=Demonstrator(root) #This just generates a new Demonstrator with original coordinates

    def onClick():

    inputDialog = Settings(root)

    root.wait_window(inputDialog.top)

    def onClick2():

    print scale

    class coords:

    global full_coordinates, dimensions, scale

    print scale

    a=9*scale

    Originx=10

    Originy=35

    coordinates1=[]

    coordinates2=[]

    x,y,i=Originx,Originy,1

    x1,y1,i=Originx,Originy,1

    while len(coordinates1)<=25:

    coordinates1.append((x,y))

    coordinates2.append((x1,y1))

    i+=1

    if i % 2 == 0:

    x,y=x+a,y

    x1,y1=x1,y1+a

    else:

    x,y=x,y+a

    x1,y1=x1+a,y1

    full_coordinates=list(set(coordinates1+coordinates2))

    b=array(full_coordinates)

    k=b+10

    dimensions=k.tolist()

    root=Tk()

    root.minsize=(700,700)

    root.geometry=('600x600')

    MG=Demonstrator(root)

    mainButton2 = tk.Button(root, width=20, text='Print "scale"', command=onClick2)

    mainButton2.grid(row=1, column=1)

    mainButton = tk.Button(root, width=20, text='Settings', command=onClick)

    mainButton.grid(row=2, column=1)

    root.mainloop()

    mainButton2.grid(row=1, column=1)

    mainButton = tk.Button(root, width=20, text='Settings', command=onClick)

    mainButton.grid(row=2, column=1)

    root.mainloop()问题:

    使用Spinnerbox更改画布上对象的大小(通过更改坐标),最好的方法是什么?

    我希望这足以提供信息,当然如果有必要,我可以提供更多信息。我也为此问题的格式提前道歉,我是新来的:)

    (添加解决方案)

    任何帮助都是极好的。欢呼声。

    标记

    展开全文
  • I'm trying to make a jpeg on a canvas scrollable but I can't seem to get my scrollbars to ... Here's some example code:from Tkinter import *import Image, ImageTkroot = Tk()frame = Frame(root, bd=2, ...
  • 我想在显示图像的画布上放置一个小图像和其他小部件。 我已经尝试过诸如compound之类的选项。背景图片很好,我想放在背景图片上的小图像也很好,但它总是在窗口的顶部或底部。 我希望将其放置在背景图像的任何区域上...
  • 我正在从相机捕捉图像,并将图像显示Tkinter画布上。但是,出现了一个奇怪的现象,画布将闪烁下面的代码def get_image_cam() :global cam,cam_flag,cam_image, cam_imageTk, canvas_imgprint '[THREAD CREATE]...
  • 实现:tkinter 画布显示图片,按下鼠标左键并且移动,实现截图 代码如下 # -*- encoding=utf-8 -*- import os import tkinter as tk from PIL import Image from PIL import ImageTk left_mouse_down_x = 0 left_...
  • 实现:tkinter 画布显示图片,按下鼠标左键并且移动,实现截图代码如下# -*- encoding=utf-8 -*-import osimport tkinter as tkfrom PIL import Imagefrom PIL import ImageTkleft_mouse_down_x = 0left_mouse_...
  • 或者,更改在画布对象中显示图像的方法我在Windows10上使用Python3.5。我已经安装了代码中提到的所有必备库。我正在使用的所有图像都作为我的项目在工作目录中。请帮助。。。在import sysimport tkinter as tkfrom ...
  • Canvas(画布)组件为 Tkinter 的图形绘制提供了基础。Canvas 是一个高度灵活的组件,你可以用它绘制图形和图表,创建图形编辑器,并实现各种自定义的小部件。 Canvas 是一个通用的组件,通常用于显示和编辑图形。你...
  • 结果半天都做不好,网上各种混乱的代码几乎没一个能用的,最后干脆曲线救国,统计完之后统计视图自动保存成图片,这个比较简单,用savefig就行,然后想看哪张图就读取图片显示到窗口的画布上. 但是动态的在画布上换图很不...
  • Python tkinter -- 第18章 画布控件之图像(image)

    千次阅读 热门讨论 2019-09-15 13:18:25
    画布的指定位置创建一个图片对象。这里的图片对象是gif,png,pgm和ppm。 (1)position:图片的坐标(x,y)。 (2)**options:图片选项 选项 含义 activeimage 指定当图片对象状态为 ACTIVE 时候显示的...
  • 图1 全屏显示图片由于 PhotoImage 若没有被引用,便会自动销毁,所以需要显示的引用它:from tkinter import Tk, Canvasfrom PIL import Image, ImageTkclass CanvasMeta(Canvas):def __init__(self, master, cnf={}...
  • 为了520能够博得女友欢心,我设计了一个用来表白的程序,主要用到了tkinter画布...其原理是用canvas显示图片,所谓的滑动和点击等等,其实就是图片的更换;下拉则是利用鼠标事件来移动图片,实现和手机下拉相同的...
  • 首先从网上下九张图,它们是把一张图分割成了九宫图,打乱后显示在canvas画布上。接下来我们只要实现图片的选中与拖动即可,用到了鼠标左键、按下并拖动左键、鼠标右键和鼠标移动四个事件的绑定。其他的并不难,直接...
  • 首先从网上下九张图,它们是把一张图分割成了九宫图,打乱后显示在canvas画布上。接下来我们只要实现图片的选中与拖动即可,用到了鼠标左键、按下并拖动左键、鼠标右键和鼠标移动四个事件的绑定。其他的并不难,直接...
  • python tkinter 部件

    2020-09-29 09:21:31
    1.Button 按钮。类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作/事件 **2.Canvas 画布。**提供绘图功能(直线、椭圆、多边形、矩形) ;可以包含图形或位图 ...**用来显示文字或图片 7.Lis
  • Label 标签组件,可以显示图片和文字 Message 标签组件, 可以根据内容将文字换行 菜单 Menu 菜单组件 MenuButton 菜单按钮组件,可以实用Menu代替 滚动条 Scale 滑动组件 Scrollbar 滚动条组件 其他组件 ...
  • 具体包括:创建一个可以点的按钮、使用具名参数、创建一个画图用的画布、画线、画正方形或矩形、画圆弧、画多边形、显示文字、创建基本的动画、对键盘事件的响应、随机函数、设置图形颜色、显示图片。学会这些基础...
  • 在用Python创建画布canvas,并在画布上导入图像时报错:“_tkinter.TclError: ...用tkinter只能装入GIF图片,也就是扩展名是.gif的图片文件,想要显示其他类型的图片,如png或jpg,需要用到其它模块 def canvas_...
  • 2)保存画布,把当前的画布保存成图片。 图形操作: 1)画直线:画直线,并动态显示 2)画矩形:画矩形,并动态显示 3)画椭圆:画椭圆,并动态显示 选择工具: 1)移动:支持移动。 2)删除,选中后删除。 配置...
  • 前两天一直在跟文本和图片打交道,今天我们更进一步,做一个能够播放本地视频文件的播放器。...只想把视频播放出来的话,也可以用label显示图片,然后调用.after()方法更新,但是这种方法至少要把更新间隔设为10m...
  • 今天我们用tkinter的canvas画布实现扑克牌的随机发牌:将54张牌随机发给四位牌手,在屏幕上显示每位牌手的牌,利用Canvas将发牌结果显示出来。需要准备的是54张扑克牌的图片(gif或者png,jpg的话要经过额外的转换)...
  • 实现:tkinter画布显示图片,按下鼠标左键并且移动,实现截图# -*- encoding=utf-8 -*-import osimport tkinter as tkfrom PIL import Imagefrom PIL import ImageTkleft_mouse_down_x = 0left_mouse_down_y = 0...
  • tkinter播放视频的原理,就是读取每一帧的图片,然后刷新画布。所以如果想实现弹幕功能,只要获取输入文本框中的文本,再写到图片上就好了。cv2.putText能够实现这个功能,但无法添加中文,所以我们需要换一种方法。...
  • tkinter播放视频的原理,就是读取每一帧的图片,然后刷新画布。所以如果想实现弹幕功能,只要获取输入文本框中的文本,再写到图片上就好了。cv2.putText能够实现这个功能,但无法添加中文,所以我们需要换一种方法。...
  • tkinter播放视频的原理,就是读取每一帧的图片,然后刷新画布。所以如果想实现弹幕功能,只要获取输入文本框中的文本,再写到图片上就好了。cv2.putText能够实现这个功能,但无法添加中文,所以我们需要换一种方法。...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

tkinter画布显示图片