我的全部代码都在这里。
使用 tkinter 的画布,我试图创建一个小游戏,让人们练习学习高音谱号上的音符。
最初显示随机音符,用户必须选择正确的音符。如果学生得到正确答案,我将无法编辑画布以显示新笔记的图像。
有人可以解释一下我的代码有什么问题吗?
while True:
randomNote = randint(0, 11)
path = noteFiles[randomNote]
correctNote = notes[randomNote]
img = Image.open(path)
tk_img = ImageTk.PhotoImage(img)
canvas.create_image(505, 200, image=tk_img)
root.mainloop()
if correctNote == noteChosen:
''' User got last note right '''
canvas.delete("all")
Run Code Online (Sandbox Code Playgroud) python tkinter python-imaging-library python-3.x tkinter-canvas
在我的 Python 脚本中,我最初将画布线创建为实线。然后在某个事件下,我使用下面的语法将行更改为破折号。
self.canvas.itemconfig(line, dash=(4, 4))
Run Code Online (Sandbox Code Playgroud)
将其改回实线的命令是什么?
基于在 Tkinter 中动态更改画布的滚动区域的示例,我尝试实现一个框架,您可以在其中使用 tkinter 在可滚动框架中添加和删除条目。我的问题是,删除条目后,保存项目的框架不会调整大小。添加条目时,它会正确调整大小。我update_layout()在这两种情况下都打电话:
from tkinter import *
class ScrollableContainer(Frame):
"""A scrollable container that can contain a number of messages"""
def __init__(self, master, **kwargs):
Frame.__init__(self, master, **kwargs) #holds canvas & scrollbars
# configure row and col to take additional space if there is some
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
# create canvas
self.canv = Canvas(self, bd=0, highlightthickness=0)
# create scrollbars
self.hScroll = Scrollbar(self, orient='horizontal',
command=self.canv.xview)
self.hScroll.grid(row=1, column=0, sticky='we')
self.vScroll = Scrollbar(self, orient='vertical',
command=self.canv.yview)
self.vScroll.grid(row=0, column=1, sticky='ns') …Run Code Online (Sandbox Code Playgroud) 如何增加或定义 tkSimpleDialog 框的窗口大小?
import Tkinter, tkSimpleDialog
root = Tkinter.Tk()
root.withdraw()
test = tkSimpleDialog.askstring("testing", "Enter your search string text")
print test
Run Code Online (Sandbox Code Playgroud) 我想获取画布上所有矩形的句柄,并带有特定标签,以将它们放置在网格几何管理器中(用户可以通过鼠标拖动来移动它们,然后我想为他“重新排序”它们)。我没有矩形的手柄,但它们都有相同的标签(“moveable_canvas”)。从那里我可以转换为项目 id (.find_withtag) 但现在怎么办?我可以将 ID 设置为 .itemconfigure 等,但如何对它们进行“网格化”?
moveable_canvases = self.canv.find_withtag("moveable_canvas")
for canvas_id in moveable_canvases:
???.grid(...)
Run Code Online (Sandbox Code Playgroud) 我在画布中央创建了一个白色文本,但我的背景非常丰富多彩,其中一部分颜色非常浅,所以我的句子的某些角落没有出现。我找不到任何设置边框或轮廓的选项。我能做什么?
我正在使用 tkinter 开发 Python 应用程序。我想要做的是在画布坐标上绘制,点将记录到列表中,以便我稍后进行计算。如果不可能,您会推荐任何其他可以做到这一点的工具或 GUI 平台吗?
编辑:到目前为止,我拥有的是一个可以从列表中获取点并在画布上绘制的应用程序。我也想要相反的工作方式。
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror
from tkinter import ttk
import tkinter
import threading
another_points = []
class Waveform(Frame):
def __init__(self, master):
ttk.Frame.__init__(self, master)
self.master = master
self.points = [10, 20, 30]
self.create_widget()
def create_widget(self):
self.LoadFrame = ttk.LabelFrame(self.master, text = "Load")
self.LoadFrame.pack(side = "left", padx = 10, pady = 10)
self.PlotFrame()
self.anotherFrame = ttk.LabelFrame(self.LoadFrame, text = "Browse")
self.anotherFrame.pack(fill = "both", padx = 10, pady = 10) …Run Code Online (Sandbox Code Playgroud) 我想创建一个圆角矩形.我正在使用tkinter的画布.
现在我更多地使用 tkinter Canvas,我想知道 bbox 的使用。
对我来说,我使用 bbox 来获取元素的坐标,但画布已经有一个方法来返回一个项目的坐标。那么他们为什么要发明像 bbox 这样的东西呢?
在这里比较官方的 tcl 描述:
盒子
pathName bbox tagOrId ?tagOrId tagOrId ...?
返回一个包含四个元素的列表,为由 tagOrId 参数命名的所有项目提供一个近似边界框。该列表的形式为“x1 y1 x2 y2”,因此所有命名元素的绘制区域都在由左侧 x1、右侧 x2、顶部 y1 和底部 y2 限定的区域内。返回值可能会高估实际边界框几个像素。如果没有项目与任何 tagOrId 参数匹配,或者如果匹配的项目有空的边界框(即它们没有可显示的内容),则返回一个空字符串。
坐标
pathName coords tagOrId ?coordList?
查询或修改定义项目的坐标。如果未指定坐标,则此命令返回一个列表,其元素是由 tagOrId 命名的项目的坐标。如果指定了坐标,则它们将替换命名项的当前坐标。如果 tagOrId 引用多个项目,则使用显示列表中的第一个。
我看到了这些之间的区别,但无法成像,在这种情况下我需要一个 bbox 而不是坐标?有人可以教我更好地理解这一点吗?
tkinter ×10
tkinter-canvas ×10
python ×9
python-3.x ×4
canvas ×1
hotkeys ×1
options ×1
python-2.7 ×1
scrollbar ×1
text ×1