标签: tkinter-canvas

如何获取画布当前的视图位置?

如何获取(或计算)区间 [0.0, 1.0] 中的数字,该数字对应于我正在查看的画布部分?我需要例如canvas.yview_moveto(1.0)(将其移动到底部)中使用的数字。就我而言,我只需要 Y 部分。我需要这个号码来解决我之前的问题,遗憾的是没有得到解决。我知道用户经常要求提供代码片段,但在这种情况下,我希望不需要它,因为我要求的是内置方法或执行此操作的方法。我根本不知道如何开始。谢谢。

过去的问题:如果用鼠标滚轮滚动,画布会留下滚动区域 我使用滚动条修复了它,该滚动条具有返回我需要的数字的 .get() 方法,但我想要一个更好的解决方案,没有滚动条。

tkinter python-3.x tkinter-canvas

1
推荐指数
1
解决办法
1333
查看次数

将对象从队列前面出队

我试图在我的 tkinter 程序中从队列前面取出一个随机形状。我已经尝试过该is_empty()方法,但似乎出现错误。

>>> AttributeError: 'Queue' object has no attribute 'pop'.
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感谢!
这是我正在使用的队列类

class Queue:
  def __init__(self):
    self.items = []
  def is_empty(self):
    return self.items == []
  def size(self):
    return len(self.items)
  def enqueue(self, item):
    self.items.insert(0, item)
  def dequeue(self):
    return self.items.pop(0)
  def peek(self):
    return self.items[0]
Run Code Online (Sandbox Code Playgroud)

矩形类:

def __init__(self, height=60, width=80 ):
    self.height = height
    self.width = width
    self.create_buttons()
    self.canvas = Canvas(root)
    self.canvas.pack()
    self.queue = Queue()  



def remove_triangle(self):
    if not self.queue.is_empty(): 
         self.canvas.delete(self.queue.pop())
Run Code Online (Sandbox Code Playgroud)

python python-3.x tkinter-canvas

1
推荐指数
1
解决办法
3553
查看次数

画布中的Tkinter窗口的高度不会填充其父级

我希望我的滚动条位于框架的底部,我的文本小部件将整个框架填充到滚动条上方.我在这里找到了一些关于宽度配置的解决方案但是当我尝试用高度替换宽度时,它无法正常工作.

from tkinter import *
from tkinter import ttk

class MainView(Frame):

    def FrameHeight(self, event):
        canvas_height = event.height
        self.canvas.itemconfig(self.canvas_frame, height=canvas_height)

    def OnFrameConfigure(self, event):
        self.canvas.config(scrollregion=self.canvas.bbox("all"))

    def __init__(self, *args, **kwargs):
        Frame.__init__(self, *args, **kwargs)
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        sensorsFrame = Frame(self)
        sensorsFrame.grid(row=0, sticky="nsew")
        sensorsFrame.grid_columnconfigure(0, weight=1)
        sensorsFrame.grid_rowconfigure(0, weight=1)

        self.canvas = Canvas(sensorsFrame)
        self.sensorsStatsFrame = Frame(self.canvas)
        self.canvas.grid_rowconfigure(0, weight=1)
        self.sensorsStatsFrame.grid_rowconfigure(0, weight=1)

        myscrollbar = Scrollbar(sensorsFrame,orient=HORIZONTAL,command=self.canvas.xview)
        self.canvas.configure(xscrollcommand=myscrollbar.set)
        self.canvas.pack(fill=BOTH, expand=1)
        myscrollbar.pack(fill=X, expand=1)

        test0 = Text(self.sensorsStatsFrame, state=DISABLED)
        test1 = Text(self.sensorsStatsFrame, width=150)
        test0.grid(column=0, row=0, sticky="nsew")
        test1.grid(column=1, row=0, sticky="nsew")

        self.canvas_frame = self.canvas.create_window((0,0),window=self.sensorsStatsFrame,anchor='nw') …
Run Code Online (Sandbox Code Playgroud)

python tkinter python-3.x tkinter-canvas

1
推荐指数
1
解决办法
2621
查看次数

Tkinter中一个多边形的可变角数量

Tkinter忙着闲逛,想知道是否有一种方法可以创建一个具有可变数量拐角的多边形?我正在尝试编写一个程序,其中涉及用户输入一定数量的坐标,然后在画布上绘制具有这些点边缘的多边形。由于我不知道用户将输入的值的数量,因此不可能为每种可能性编写代码,那么这真的可能吗?

canvas.create_polygon(x1,y1,x2,y2...xn,yn,fill="black")
Run Code Online (Sandbox Code Playgroud)

python tkinter tkinter-canvas

0
推荐指数
1
解决办法
176
查看次数

如何在gui中使用tkinter显示图像

给定的代码不起作用,因为它给出了'haridwar.jpg'找不到文件的错误,尽管我尝试将它放在Python35和桌面上.请帮忙

import tkinter as tk  
from PIL import Image,ImageTk  
root = tk.Tk()  
root.title("display image")  
im=Image.open("haridwar.jpg")  
photo=ImageTk.PhotoImage(im)  
cv = tk.Canvas()  
cv.pack(side='top', fill='both', expand='yes')  
cv.create_image(10, 10, image=photo, anchor='nw')  
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

python tkinter python-imaging-library tkinter-canvas python-3.5

0
推荐指数
1
解决办法
1万
查看次数

"ID"和"标签"与Tkinter对象之间的区别

我正在尝试在Python tkinter中创建一个涉及火箭飞船和一些小行星的游戏.问题是,火箭飞船由多种形状组成.我不需要关于如何简化火箭形状的建议,但如果我能在画布上使用图像的指针,那可能会更好.
无论如何,我正在研究如何将多个形状组合成单个形状或一次移动多个形状的方法.这涉及ID和标签的使用,我不清楚我应该使用哪些以及为什么.
为什么我需要一次移动多个形状?火箭飞船由多种形状组成,需要从一侧移动到另一侧.我真的不希望一堆self.canvas.move()方法弄乱我的代码,所以如果有人能帮助我,我会非常感激.提前致谢!

python tkinter python-3.x tkinter-canvas

0
推荐指数
1
解决办法
368
查看次数

在 Tkinter [.grid 方法] 中嵌入 MatPlotLib 图形,并自定义 MatPlotLib 的导航工具栏

我在 Tkinter 中嵌入 MatPlotLib 图形时遇到了问题,在 Google 和 MatPlotLib 网站上进行了一些搜索后,我能得到的最好的方法是标准方法:

import tkinter

from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)

fig = Figure(figsize=(5, 4), dpi=100)

canvas = FigureCanvasTkAgg(fig, master=root)

canvas.draw()

canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, root) toolbar.update()

canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试用 .grid 替换打包布局(并删除 .pack() 参数),我会收到一堆错误,并且无论我尝试了多少次 Google 搜索,嵌入 MatPlotLib 的所有方法Tkinter 中的图仅使用 pack 方法。有人可以帮我解决这个问题吗?我想嵌入图形,但使用网格方法,因为我的 GUI 应用程序的其余布局是 .grid 布局。

我在 Tkinter 中的导航工具栏遇到的另一个问题是导航工具栏显然可以自定义(至少根据SentDex [5:18])。他似乎没有详细说明我如何做到这一点,这对我来说很困难,因为我对 MatPlotLib 的按钮不太满意(它们看起来非常古老和过时)。

有人可以帮我解决这个问题吗?当我只放入图表时,它似乎工作得很好,但是当我尝试将图表放入导航工具栏时,我也会遇到问题。对此的任何帮助将不胜感激。谢谢!

python tkinter graph matplotlib tkinter-canvas

0
推荐指数
1
解决办法
7109
查看次数

用于 Raspberry Pi 的基于 Tkinter/Canvas 的类似信息亭的程序

我想在 Raspberry Pi(或者,就此而言,任何基于 Unix/Linux 的计算机)上运行一个 Python 程序,它可以有效地将整个屏幕变成一个画布,并允许我在其上实时绘制文本和图形对象。我理想地希望这也能自动隐藏桌面上的所有其他内容并消除窗口框架和任务栏,类似于以全屏模式播放视频(使用 ESC 退出)。

到目前为止,我的研究表明 Tkinter/Canvas 将是最简单的解决方案。但是,虽然我在网上找到了一些例子来完成我上面描述的部分内容,但我无法将这些部分放在一起完成所有工作的形式。我之前没有使用 Tkinter 的经验也无济于事。

如果有人能指出我所描述的设置的最小工作示例,我将不胜感激。

python kiosk tkinter raspberry-pi tkinter-canvas

-1
推荐指数
1
解决办法
3225
查看次数

如何在tkinter中绘制对角线箭头?

我需要从指向黄色框的蓝色和绿色框绘制两个箭头。我尝试使用 create_line 绘制对角线,但没有用。任何人都可以建议我可以绘制这些箭头的任何方法。使用 create_line 时的错误消息是:AttributeError: '_tkinter.tkapp' object has no attribute 'create_line'

from tkinter import *
import tkinter as tk


window = Tk()
window.geometry("900x500")
window.configure(background='red')
window.title("Theoretical")

label1 = Label(window, text="Hess' cycle of combustion", fg="black", bg="red", font=("Comic Sans MS", 20))
label1.pack()    

text1 = Text(window, width=20, height = 1, bg= "blue")
text1.place(x=200, y=100)

window.create_line(0, 0, 200, 100)
window.create_line(0, 100, 200, 0, fill="white")

text2 = Text(window, width=20, height = 1, bg= "green")
text2.place(x=520, y=100)

text3 = Text(window, width=20, height = 1, bg= "yellow")
text3.place(x=370, …
Run Code Online (Sandbox Code Playgroud)

python tkinter tkinter-canvas

-2
推荐指数
1
解决办法
7094
查看次数