标签: tkinter

如何在 python 中的 tkinter 上创建网格?

我设法创建了一个具有给定半径、起点和多个点的函数。它将创建一个大圆圈,并使用这个圆圈创建 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)

tkinter python-2.7

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

如何获取窗口中的所有对象 - 及其设置

这个想法是获取所有按钮、标签、输入字段的信息......给定窗口的树视图。有了这些信息,就可以关闭所有按钮或隐藏名称以“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 ...

python tkinter

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

使用 TkInter 的简单窗口

我是新手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

python user-interface tkinter python-2.7

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

是否可以禁用列表框中的元素?

我有这个代码片段:

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)

是否可以禁用第二条选择线,使其无法选择?此外,是否可以以不同的(灰色)字体显示它?

python tk-toolkit listbox tkinter

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

Tkinter Inner Padding 不能只在一侧

这可能会令人困惑,但出于某些奇怪的原因使用ipadxipady 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 中做到这一点......

python tkinter python-2.7

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

Python 3 Tkinter 笔记本标签。如何返回所有选项卡的文本而不是数字 ID?

大家好,我一直在学习 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 tkinter python-3.x

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

如何在 Python Tkinter 中获得 Treeview 和 Scrollbar 的所有粘性网格?

我在 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)

任何帮助将不胜感激。

python treeview tkinter python-2.7

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

使用 PIL.ImageTk 创建 tkinter.PhotoImage 对象时出现 AttributeError

我试图在 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)

不会引发错误。我究竟做错了什么?

python tkinter python-imaging-library photoimage

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

从 tkinter 窗口清除所有标签

所以我是 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(),但这些只适用于该函数中使用的最后一个标签。我应该对所有标签或其他东西进行分组吗?

python user-interface tkinter labels

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

Python:在 tkinter 中正确嵌入带有滑块的 matplotlib 图

我在 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)

python tkinter matplotlib

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