我设法创建了一个具有给定半径、起点和多个点的函数。它将创建一个大圆圈,并使用这个圆圈创建 4 个小圆圈。我想在背景上添加一个网格,该网格将从左上角开始每隔 100 个像素显示 TKinter 中的 Y 轴和 X 轴。坐标原点应该是左上角。例如,如果屏幕是 300x300,那么窗口将在其 X 轴上有 3 条线(在 100、200 和 300),从左到右,从上到下。作为坐标系的网格。
我如何创建法线的示例。我使用包含 2 个点起点和终点的线类:
rootWindow = Tkinter.Tk()
rootFrame = Tkinter.Frame(rootWindow, width=1000, height=800, bg="white")
rootFrame.pack()
canvas = Tkinter.Canvas(rootFrame, width=1000, height=800, bg="white")
canvas.pack()
def draw_line(l):
"Draw a line with its two end points"
draw_point(l.p1)
draw_point(l.p2)
# now draw the line segment
x1 = l.p1.x
y1 = l.p1.y
x2 = l.p2.x
y2 = l.p2.y
id = canvas.create_line(x1, y1, x2, y2, width=2, fill="blue")
return id
Run Code Online (Sandbox Code Playgroud) 这个想法是获取所有按钮、标签、输入字段的信息......给定窗口的树视图。有了这些信息,就可以关闭所有按钮或隐藏名称以“xx”开头的所有输入字段。将想法可视化的最佳方法是树状视图,例如:
\window
\Frame1
\button1(Name,x,y ...)
\button2(..)
\Frame2
Run Code Online (Sandbox Code Playgroud)
直到现在我找到了信息的最后一部分
from tkinter import Button
b = Button()
for k in b.configure().keys():
print (k, ':', b.cget(k))
from tkinter import Listbox
li = Listbox()
for k in li.configure().keys():
print (k, ':', li.cget(k))
Run Code Online (Sandbox Code Playgroud)
但是如何对窗口的所有元素进行迭代?我没有找到类似 typeof(button) == true ... 或 typeof(object) -> Button ...
我是新手TkInter并使用 Python 开发 UI。因此,作为逐步学习的一种方式,我只是想获得一个窗口。我写了以下简单的代码:
from Tkinter import Tk
window = Tk()
window.geometry("266x208")
window.title("Claculator")
Run Code Online (Sandbox Code Playgroud)
我期待在运行代码时弹出一个空窗口,但我注意到了。只是Process finished with exit code 0。我错过了什么?
PS:Python 2.7,Windows 7
我有这个代码片段:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
list = ['one','disable me','two']
listbox = tk.Listbox(self,height=len(list))
for item in list:
listbox.insert(tk.END, item)
listbox.pack()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
是否可以禁用第二条选择线,使其无法选择?此外,是否可以以不同的(灰色)字体显示它?
这可能会令人困惑,但出于某些奇怪的原因使用ipadx或ipady in .pack()with(1,0)或 like this: Label(root, text='Hello World').pack(ipadx=(1,0))will always make this error: TclError: bad ipady value "1 0": must be positive screen distance。尝试其他事情,例如:Label(root, text='Hello World').pack(ipadx=1)工作正常。但是这说:
填充选项(padx、ipadx、pady 和 ipady)可以采用代表左/右和顶部/底部填充的 2 元组。
那么,这是怎么回事……
这里有一些完整的代码也有错误:
from Tkinter import *
root = Tk()
Label(root, text='Hello World').pack(ipadx=(1, 0))
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
更新:我发现你不能在 Tkinter,甚至 Tcl/Tk 中做到这一点......
大家好,我一直在学习 Tkinter 并制作一些 GUI 应用程序。我正在试验笔记本小部件,但被困在一个地方。我想知道是否有一种方法可以对所有当前选项卡使用 for 循环并返回所有选项卡的文本名称而不是数字 ID。我想用它来跟踪帧。我四处搜索并找到了如何显示当前选项卡的选项卡文本,但我需要所有选项卡。我一直无法找到任何专门用于此的东西。如果您有想法,请告诉我。谢谢。
[编辑] 代码片段
from tkinter import *
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText
from tkinter import ttk
class Window(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.master = master
self.init_window()
self.second_window()
self.pm_tabs = []
def init_window(self):# Builds the UI for the main window
self.n = ttk.Notebook(root)
self.get_tabs_button = Button(self.textboxframe,
width=20,
text='Get Tab Names',
command=lambda:self.get_tab_names())
self.get_tabs_button.grid(row = 0,
column= 1,
padx=(5,5),
pady=(5,150),
sticky=N+S+E+W)
self.n.add(self.textboxframe, text='Chat')
self.n.grid(row=0, column=0, sticky=N+S+E+W)
def second_window(self):# UI for second window …Run Code Online (Sandbox Code Playgroud) 我在 Python 2.7 中的 Tkinter 中想要的是以下网格布局:
然而,有一次,我开始使用grid()函数而不是pack()函数,运行脚本时没有任何显示。以下是我所坚持的:
import Tkinter, ttk
class App(Tkinter.Frame):
def __init__(self,parent):
Tkinter.Frame.__init__(self, parent, relief=Tkinter.SUNKEN, bd=2)
self.parent = parent
self.grid(row=0, column=0, sticky="nsew")
self.menubar = Tkinter.Menu(self)
try:
self.parent.config(menu=self.menubar)
except AttributeError:
self.tk.call(self.parent, "config", "-menu", self.menubar)
self.tree = ttk.Treeview(self.parent)
self.tree.grid(row=0, column=0, sticky="nsew")
self.yscrollbar = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview)
self.yscrollbar.grid(row=0, column=1, sticky='nse')
self.tree.configure(yscrollcommand=self.yscrollbar.set)
self.yscrollbar.configure(command=self.tree.yview)
if __name__ == "__main__":
root = Tkinter.Tk()
root.title("MyApp")
app = App(root)
app.pack()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
我试图在 tkinter.PhotoImage 对象中放置一个用 PIL 调整大小的图像。
import tkinter as tk # I use Python3
from PIL import Image, ImageTk
master = tk.Tk()
img =Image.open(file_name)
image_resized=img.resize((200,200))
photoimg=ImageTk.PhotoImage(image_resized)
Run Code Online (Sandbox Code Playgroud)
但是,当我后来尝试打电话时
photoimg.put( "#000000", (0,0) )
Run Code Online (Sandbox Code Playgroud)
我得到一个
AttributError: 'PhotoImage' object has no attribute 'put'
Run Code Online (Sandbox Code Playgroud)
虽然这个:
photoimg=tk.PhotoImage(file=file_name)
photoimg.put( "#000000", (0,0))
Run Code Online (Sandbox Code Playgroud)
不会引发错误。我究竟做错了什么?
所以我是 tkinter 的新手,但我已经得到了我想要的工作,直到某一点。我不确定我是否正确设置了它,但是我有一张世界地图,右边有按钮,左边有一个事件日志,当事情发生时,它会填满标签。问题是过一会儿,整个日志就填满了。删除所有标签或每次删除最旧(顶部)标签的最佳方法是什么?这就是我的意思:
在这里定义:
root=Tk()
Map=PhotoImage(file="C:/Users/Willam/Desktop/CWProgram/map2.gif")
background=Label(root,image=Map).place(x=100,y=0,relwidth=1,relheight=1)
Title=Label(root,text=' LOG').pack(anchor=NW)
Run Code Online (Sandbox Code Playgroud)
我像这样创建我的标签:
info=Label(root,text='Select a sector to move units from',wraplength=170)
info.pack(anchor=NW)
Run Code Online (Sandbox Code Playgroud)
我尝试了通常的info.destoy()and info.forget(),但这些只适用于该函数中使用的最后一个标签。我应该对所有标签或其他东西进行分组吗?
我在 pyplot 中创建了这个图,它有一个滑块来查看一定范围的数据。
import random
import matplotlib
import tkinter as Tk
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
y_values = [random.randrange(20, 40, 1) for _ in range(40)]
x_values = [i for i in range(40)]
l, = plt.plot(x_values, y_values)
plt.axis([0, 9, 20, 40])
ax_time = plt.axes([0.12, 0.1, 0.78, 0.03])
s_time = Slider(ax_time, 'Time', 0, 30, valinit=0)
def update(val):
pos = s_time.val
ax.axis([pos, pos+10, 20, 40])
fig.canvas.draw_idle()
s_time.on_changed(update)
#plt.show()
matplotlib.use('TkAgg')
root = …Run Code Online (Sandbox Code Playgroud) tkinter ×10
python ×9
python-2.7 ×4
labels ×1
listbox ×1
matplotlib ×1
photoimage ×1
python-3.x ×1
tk-toolkit ×1
treeview ×1