小编Dan*_*son的帖子

Tkinter Treeview 如何用鼠标正确选择多个项目

我正在尝试使用鼠标来选择和取消选择多个项目。我有它的工作,但是当用户快速移动鼠标时会出现问题。当鼠标快速移动时,一些项目会被跳过并且根本没有被选中。我一定是走错了路。

更新 1: 我决定使用自己的选择系统,但得到的结果与上述相同。当鼠标快速移动时,某些项目会被跳过,因此它们没有添加正确的颜色标签并保持不变。如果鼠标缓慢移动,所有项目都会被正确选择。下面是新代码和问题的另一个图像。

更新 2:我已经解决了这个问题并发布了工作代码只是为了完整性和将来帮助其他人。我最终使用了我自己的选择系统而不是内置的选择系统。

示例图像

import tkinter as tk
import tkinter.ttk as ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Treeview Demo')
        self.geometry('300x650')
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)

        tv = self.tv = ttk.Treeview(self)
        tv.heading('#0', text='Name')
        # Populate tree with test data.
        for idx in range(0, 4):
            tv.insert('', idx, f'!{idx}', text=f'Item {idx+1}', tags='TkTextFont', open=1)
            iid = f'!{idx}_!{idx}'
            tv.insert(f'!{idx}', '0', iid, text=f'Python {idx+1}', tags='TkTextFont', open=1)
            for i in range(0, 5):
                tv.insert(iid, f'{i}', f'{iid}_!{i}', text=f'Sub item {i+1}', tags='TkTextFont')

        tv.grid(sticky='NSEW')
        self.active_item = None

        def motion(_): …
Run Code Online (Sandbox Code Playgroud)

python tkinter

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

如何获取 tkinter 窗口标题栏的高度

我试图弄清楚如何获得 tkInter 窗口标题栏的高度,但似乎找不到任何关于它是如何完成的信息。

我试过使用root.geometry(),似乎root.geometry()只返回窗口内容的大小,而不是带有标题栏和边框大小的窗口的总大小。我看到其他人说你需要向操作系统询问这些事情。我希望避免这种情况,因为它会使代码平台独立变得更加困难。必须有一种方法可以做到这一点,而无需为此前往操作系统。有谁知道我必须做什么才能获得这些信息?

我的系统:

操作系统:Linux

KDE 等离子: 5.16.4

KDE 框架: 5.61.0


import tkinter

root = tkinter.Tk()
root.geometry("250x250+100+100")
root.update_idletasks()

print('root.winfo_x() = ', root.winfo_x())
print('root.winfo_y() = ', root.winfo_y())
print('root.geometry() = ', root.geometry())

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

测试代码结果:

    root.winfo_x() =  100
    root.winfo_y() =  100
    root.geometry() =  250x250+100+100
Run Code Online (Sandbox Code Playgroud)

使用屏幕标尺应用程序测量的窗口高度为:

x=102, y=286
Run Code Online (Sandbox Code Playgroud)

python tkinter

8
推荐指数
2
解决办法
1455
查看次数

Tkinter 如何绑定到 shift+tab

我正在尝试绑定SHIFT+TAB键,但我似乎无法让它工作。我绑定到的Entry小部件是一个小部件。

我试过用 绑定键widget.bind('<Shift_Tab>', func),但我收到一条错误消息:

文件“/usr/lib64/python3.8/tkinter/初始化的.py”,行1337,在_bind self.tk.call(什么+(序列,CMD))_tkinter.TclError:不良事件类型或键符“Shift_Tab”


更新

我仍然在检测SHIFT+ 时遇到问题TAB。这是我的测试代码。我的操作系统是 Linux。tab重点工作,只是没有SHIFT+ TAB。似乎要解决一个简单的问题,所以我一定是错的?

我试图在Treeview我在一行上覆盖小部件以模拟内联编辑的列之间切换。一行中只能有一个活动小部件。我会跟踪我所在的列以及当用户按下SHIFT+TAB或 时TAB,我会删除当前的小部件并在相应的列中显示一个新的小部件。

这是完整项目的链接

该项目在一个文件中,没有导入。

下面的代码是我的尝试,它不起作用。

import tkinter as tk
import tkinter.ttk as ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)
        self.title('Default Demo')
        self.geometry('420x200')

        wdg = ttk.Entry(self)
        wdg.grid()

        def tab(_):
            print('Tab pressed.')

        def shift_tab(_):
            print('Shift tab …
Run Code Online (Sandbox Code Playgroud)

python keyboard-shortcuts tkinter key-bindings python-3.x

7
推荐指数
2
解决办法
1222
查看次数

在 chrome 中获取错误的窗口高度

我试图在 Chrome 中获得正确的浏览器窗口的宽度和高度。Firefox 中的大小是正确的,我没有尝试过任何其他浏览器。

我有文档类型设置为!DOCTYPE html和尝试$( window ).height()$( window ).width()window.innerHeightwindow.innerWidth,但他们都给出错误的价值观。

我正在运行 openSuse tumbleweed,chrome 的版本是“Version 86.0.4240.75 (Official Build) (64-bit)”

将 chrome 更新为“版本 87.0.4280.88(官方版本)(64 位)”这也没有帮助,仍然是错误的大小。

我在显示这一点的图像中包含了一些,注意:DOMRect 值在 chrome 中不正确,但在 firefox 中是正确的。抱歉,您可能需要放大才能看到这些值。下面是我在两个图像中登录的内容。

console.log(
    $('#primary')[0].getBoundingClientRect(),
    $( window ).width(),
    window.innerWidth,
    $( window ).height(),
    window.innerHeight
)
Run Code Online (Sandbox Code Playgroud)

我需要精确的尺寸才能正确排列。您可以在 Firefox 图像下方看到水平滚动条正上方的背景颜色“红色”。我需要知道窗户的正确尺寸,以便我可以进行数学计算并排列整齐。

有没有另一种更准确的方法来做到这一点?

 铬尺寸错误。

Firefox 中的正确大小

下图是我从“FSDford”下面的评论中建议的 JSFiddle 中得到的。您可以在控制台中看到大小为 877 的红色“需要放大才能看到”。尺子说它的宽度是 856!Firefox 再次具有正确的宽度。

JSFiddle 错误的大小

JSF中等大小

javascript jquery

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

什么Wordpress钩子首先激活admin_init或admin_menu

从我在互联网上看到的admin_init在admin_menu之前触发,这是真的吗?

我已经制作了一个插件模板来测试这个并发现它并非如此.

测试代码如下.我在激活插件时得到的输出是......

2

pt\singelton Object
(
    [page] => pt
    [page_title] => Page Title
    [menu_title] => Menu Title
    [capability] => manage_options
)
Run Code Online (Sandbox Code Playgroud)

注意上面输出中的数字2,它是从函数admin_menu()输出的.

/*
  License: GPL
  Version: 0.01
  Plugin Name: Plugin Template.
  Plugin URI: http://www.dyncomp.net/plugins/plugin-template/
  Description: Plugin Template.
  Author: Dan Huckson
  Author URI: http://www.dyncomp.net
  Text Domain: pt
  Domain Path: /lang/
 */

namespace pt;

class obj {
    private $instance;

    // Activate
    static function activate() {
        $page = __NAMESPACE__;

        if (!($opt = get_option($page)))
            add_option($page, (object) array('page' => $page, 'in_date' => getdate()));
        else …
Run Code Online (Sandbox Code Playgroud)

php wordpress plugins activation

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

如何停止窗口抖动

我有一个窗口,当您单击并拖动鼠标时,它会自行调整大小。问题是从右向左拖动时窗口的右侧会跳来跳去。这个问题只发生在 Windows 中,而不是 Linux 我不确定 MaxOS,因为我无法访问运行它的机器。不过知道会很高兴!有谁知道如何解决这一问题?

更新:我已经根据下面建议的“jizhihaoSAMA”更新了代码,现在它在 Windows 和 Linux 中运行良好,但不确定 MacOS!

import tkinter as tk
import tkinter.ttk as ttk
import tkinter.font as tkfont

from sys import platform


class Selector(tk.Toplevel):
    def __init__(self, parent, **kwargs):
        super().__init__(parent, **kwargs)
        self.geometry('0x0+0+0')
        self.overrideredirect(True)

        if platform == 'linux':
            self.wait_visibility(self)

        self.wm_attributes('-alpha', 0.2)
        self.wm_attributes("-topmost", True)

        self.config(bg='#00aaff')
        self.update()
        self.lift()

        self.linespace = self.master.linespace
        self.heading_padding = parent.style.lookup('Treeview.Heading', 'padding')
        self.theme = parent.style.theme_use()
        self.style = parent.style

    def select(self, _):
        widget = self.focus_get()
        master = widget.winfo_toplevel()
        if widget == master:
            return

        padding = …
Run Code Online (Sandbox Code Playgroud)

python tkinter

6
推荐指数
0
解决办法
375
查看次数

Tkinter 进度条如何在模型对话框中正确实现

我想要一个带有进度条和一些条目、标签和按钮小部件的顶级窗口/对话框。我希望从 main_window 窗口更新对话框。main_window 完成工作,我需要将其反映在对话框中。我希望主窗口保持活动状态,以便您可以停止该过程。我还希望能够在对话框中停止该过程。

如果不使用多处理和线程,我就无法让它工作。似乎我以错误的方式解决这个问题,还是我?另外,我是多处理和线程的新手,所以我希望无论如何我都做对了。如果有人知道更好的方法来做到这一点,请告诉我。

下面是我尝试做我想做的事情,它有效,但这是正确的方法吗?

我的第一次尝试:

import tkinter as tk
import tkinter.ttk as ttk

from time import sleep
from queue import Empty
from threading import Thread
from multiprocessing import Process, Queue


HIDE = -1
STOP = -2
BREAK = -3
PAUSE = -4
RESUME = -5


class App(tk.Tk):
    def __init__(self, **kwargs):
        title = kwargs.pop('title', '')
        theme = kwargs.pop('theme', 'clam')
        geometry = kwargs.pop('geometry', None)
        exit_callback = kwargs.pop('exit_callback', None)
        super().__init__(**kwargs)

        self.title(title)
        self.style = ttk.Style()
        self.style.theme_use(theme)

        if geometry:
            self.geometry(geometry)

        if exit_callback:
            self.protocol('WM_DELETE_WINDOW', …
Run Code Online (Sandbox Code Playgroud)

python multithreading tkinter multiprocessing ttk

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

Tkinter 如何更改树视图所选项目的颜色

如何在树视图中更改选定的文本颜色,我似乎找不到太多关于该主题的信息。

这是我尝试过的,但颜色没有像我想要的那样变成红色,它保持蓝色。

from tkinter import *
from tkinter.ttk import Treeview, Style


class App(Frame):

    def __init__(self, parent):
        super().__init__()
        self.container = Frame.__init__(self, parent)
        style = Style()
        self.tv = None
        self.tree()
        style.configure('Treeview', selectbackground='red')

    def tree(self):
        tv = self.tv = Treeview(self.container)
        tv.grid(sticky='NSEW')

        tv.insert('', '0', 'item1', text='Item 1')
        tv.insert('', '1', 'item2', text='Item 2')
        tv.insert('', '2', 'item3', text='Item 3')

        tv.insert('item1', '0', 'python1', text='Python 1')
        tv.insert('item1', '1', 'python2', text='Python 2')

        tv.insert('python1', '0', 'sub1', text='Sub item 1')
        tv.insert('python1', '1', 'sub2', text='Sub item 2')


def main():
    root = Tk() …
Run Code Online (Sandbox Code Playgroud)

python tkinter

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

嵌套地图golang的结构

嗨,我是新手,正在尝试弄清楚地图的工作原理。我已经编写了一个小测试程序,似乎无法使其正常工作。我做错了什么?

package main

import (
    "fmt"
)

type Stats struct {
    cnt      int
    category map[string]Events
}

type Events struct {
    cnt   int
    event map[string]Event
}

type Event struct {
    value int64
}

func main() {

    stats := new(Stats)
    stats.cnt = 33
    stats.category["aa"].cnt = 66
    stats.category["aa"].event["bb"].value = 99

    fmt.Println(stats.cnt, stats.category["aa"].event["bb"].value)
}
Run Code Online (Sandbox Code Playgroud)

maps struct go

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

Tkinter如何调整字体大小并保持对齐

我正在编写一个需要缩放的应用程序。使用默认的系统字体“ TkDefaultFont和TkTextFont”,我增加了它们的大小,并得到了想要的结果。问题在于调整大小后,字段标签和字段小部件之间的对齐方式不正确。我试过应用update_idletasks(),但是它什么也没做。将鼠标移到小部件上可以解决此问题,如视频中所示。如果您运行下面的示例,请转到size旋转框,然后更改大小以查看问题。

我的开发系统是Linux,台式机KDE,我不知道这是否是操作系统问题。

指向该问题的简短视频的链接。 对齐问题视频。

import tkinter as tk
import tkinter.ttk as ttk
import tkinter.font as tkfont

root = tk.Tk()
root.rowconfigure(0, weight=1)
root.columnconfigure(99, weight=1)


frame = ttk.Frame(root)
frame.rowconfigure(0, weight=1)
frame.columnconfigure(0, weight=1)

cbo = ttk.Combobox(frame)
cbo.config(
    values=('Test 1', 'Test 2', 'Test 3')
)
cbo.set(value='Test 1')

ent_var = tk.StringVar()
ent = ttk.Entry(frame, textvariable=ent_var)
ent_var.set('Test')


lb_size = ttk.Label(frame, text='size')
spn = ttk.Spinbox(frame,  values=tuple(range(1, 101)))

font1 = tkfont.nametofont('TkDefaultFont')
font2 = tkfont.nametofont('TkTextFont')

lbl_field_name = tk.Label(frame, text='Field Name')
lbl_field_name.grid()


def size(e):
    cfg = font1.actual()
    cfg['size'] = …
Run Code Online (Sandbox Code Playgroud)

python tkinter

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

随机数发生器过于频繁地重复某些数字

我正在写一个彩票抽奖模拟程序作为一个项目.游戏的工作方式是你需要选择从49中抽取的6个数字才能获胜.

你获胜的机会是1/13,983,816,因为这是49个中有6个的组合.将demo program on Go playground 产生围绕循环下去,每次六个新的号码.

每次生成一组新的数字时,我都会测试它是否已经存在,如果确实存在,我就会突破循环.对于13,983,816种组合,您会认为在相同的6个数字重复之前需要很长时间,但在测试中它总是在10000次迭代之前失败.有谁知道为什么会这样?

arrays random math generator go

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

如何在Python中将字符串(uri)拆分为嵌套字典

转换字符串uri(如“ abc / efg / hij / klm”)并输出嵌套词典(如以下示例)的最佳方法是什么?输入uri可以有许多斜线。

{
    'abc': {
        'dfg': {
            'hij': {
                'klm': {}
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

python

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

Tkinter,如何调整树视图缩进大小和指示器箭头图像

我有一个树形视图小部件,您可以放大和缩小字体大小。问题是缩进在放大时与正常时不成比例。有没有办法调整缩进宽度?下面是两张图片,一张是正常的,另一张是放大的。我也想知道是否有办法更改指示器图像?

更新:由于下面的jasonharper评论,我已经解决了缩进问题。我仍然需要更改指示箭头图像似乎无法在网络上找到任何信息。

图片1

图像2

python tkinter

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