Rocksolid Light

Welcome to RetroBBS

mail  files  register  newsreader  groups  login

Message-ID:  

Linus? Whose that? -- clueless newbie on #Linux


devel / comp.lang.python / Re: [tkinter][Windows]Unexpected state report for the tab key

SubjectAuthor
* [tkinter][Windows]Unexpected state report for the tab keyStefan Ram
+* Re: [tkinter][Windows]Unexpected state report for the tab keyStefan Ram
|`- Re: [tkinter][Windows]Unexpected state report for the tab keyEryk Sun
`* Re: [tkinter][Windows]Unexpected state report for the tab keyRob Cliffe
 `- Re: [tkinter][Windows]Unexpected state report for the tab keyStefan Ram

1
[tkinter][Windows]Unexpected state report for the tab key

<slideshow-20211025021820@ram.dialup.fu-berlin.de>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=20121&group=comp.lang.python#20121

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.python
Subject: [tkinter][Windows]Unexpected state report for the tab key
Date: 25 Oct 2021 01:57:16 GMT
Organization: Stefan Ram
Lines: 42
Expires: 1 Dec 2021 11:59:58 GMT
Message-ID: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de FBo3COU4+0m5pW7THExPPwGlGCAdYSNiS05DUfyMAWnuNK
X-Copyright: (C) Copyright 2021 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Accept-Language: de-DE, en-US, it, fr-FR
 by: Stefan Ram - Mon, 25 Oct 2021 01:57 UTC

I am writing a slideshow program, and the problem is that
the slideshow still continues about one second when the tab
key is released, while it is supposed to stop immediately.

I have now tracked down what seemed to be a tkinter problem
to what seems to be a Windows problem.

I have written the small standalone program below that runs
under Python 3.7 or later and under Windows (under IDLE or
under the Windows console) to demonstrate the problem.
(The program does not even need to have the focus!)

This program starts beeping when the tab key is pressed. It
should stop beeping immediately after the tab key has been
released. But here, it continues instead to beep for about
one second!

This means that GetKeyState still returns that the tab key
is pressed after the tab key already has been released.
Well, how then am I going to make my slide show stop the
moment the key is being released?

import winsound # Windows specific
import ctypes # Windows specific
import time

tab_down_hllDll = ctypes.WinDLL( "User32.dll" ) # Windows specific
tab_down_VK_TAB = 0x09 # Windows specific
def tab_down(): # Windows specific
return \
tab_down_hllDll.GetKeyState(tab_down_VK_TAB) & 0b1000000000000000\
> 0

while True:
td=tab_down()
if td:
winsound.Beep( 2000, 50 )
else:
time.sleep( 0.050 )

Re: [tkinter][Windows]Unexpected state report for the tab key

<GetAsyncKeyState-20211025031639@ram.dialup.fu-berlin.de>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=20122&group=comp.lang.python#20122

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.python
Subject: Re: [tkinter][Windows]Unexpected state report for the tab key
Date: 25 Oct 2021 02:17:04 GMT
Organization: Stefan Ram
Lines: 13
Expires: 1 Dec 2021 11:59:58 GMT
Message-ID: <GetAsyncKeyState-20211025031639@ram.dialup.fu-berlin.de>
References: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de gBaCtCOQy+hU2arMohuSCQROzJ6Tr92aU5gkClazIXt1mW
X-Copyright: (C) Copyright 2021 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Accept-Language: de-DE, en-US, it, fr-FR
 by: Stefan Ram - Mon, 25 Oct 2021 02:17 UTC

ram@zedat.fu-berlin.de (Stefan Ram) writes:
>tab_down_hllDll.GetKeyState(tab_down_VK_TAB) & 0b1000000000000000

In the meantime, I read about "GetAsyncKeyState". I thought that
this would solve my problem, but no. The behavior still seems
to be the same when "GetKeyState" above is replaced by
"GetAsyncKeyState"!

When I unpress the tab key in some applications, I can see that
the application stops to exhibit its tab key behavior /immediately/
while my little Python program still emits several beep.

Re: [tkinter][Windows]Unexpected state report for the tab key

<mailman.30.1635144505.23718.python-list@python.org>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=20123&group=comp.lang.python#20123

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: eryksun@gmail.com (Eryk Sun)
Newsgroups: comp.lang.python
Subject: Re: [tkinter][Windows]Unexpected state report for the tab key
Date: Mon, 25 Oct 2021 01:48:22 -0500
Lines: 46
Message-ID: <mailman.30.1635144505.23718.python-list@python.org>
References: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
<GetAsyncKeyState-20211025031639@ram.dialup.fu-berlin.de>
<CACL+1at6LwSEu6_Rbe1o3hC12X8TeX5K7hbWC=AurVbiiiEXXA@mail.gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
X-Trace: news.uni-berlin.de 7J8G0/kd8B0mtzirodXe0AwXXf9ugavzaXvhHDaHysNQ==
Return-Path: <eryksun@gmail.com>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="2048-bit key; unprotected key"
header.d=gmail.com header.i=@gmail.com header.b=Cp8WKpaf;
dkim-adsp=pass; dkim-atps=neutral
X-Spam-Status: OK 0.000
X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'def': 0.04; 'gui': 0.05;
'queue': 0.07; 'ram': 0.07; 'subject:Windows': 0.07; 'tab': 0.07;
'messages.': 0.09; 'subject:][': 0.09; 'terminal': 0.09;
'writes:': 0.09; 'import': 0.15; 'buffer.': 0.16; 'classic': 0.16;
'received:209.85.210.170': 0.16; 'received:mail-
pf1-f170.google.com': 0.16; 'subject:tab': 0.16;
'subject:tkinter': 0.16; 'up/down': 0.16; 'want,': 0.16; 'wrote:':
0.16; 'instead': 0.17; 'solve': 0.19; 'to:addr:python-list': 0.20;
'subject:: [': 0.21; 'input': 0.21; 'problem,': 0.22; 'cc:2**0':
0.25; 'stefan': 0.26; "isn't": 0.27; 'received:209.85.210': 0.29;
'message-id:@mail.gmail.com': 0.32; 'but': 0.32; 'subject:for':
0.33; 'windows': 0.34; 'header:In-Reply-To:1': 0.34;
'received:google.com': 0.34; 'from:addr:gmail.com': 0.35;
'received:209.85': 0.37; 'read': 0.38; 'received:209': 0.39;
'skip:u 20': 0.39; 'wants': 0.40; 'should': 0.40; 'skip:b 30':
0.61; 'skip:o 10': 0.61; 'pass': 0.64; 'key': 0.64; 'instead,':
0.70; 'subject:]': 0.70; 'skip:f 20': 0.75; 'skip:k 30': 0.84
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
h=mime-version:in-reply-to:references:from:date:message-id:subject:to
:cc; bh=Oj1UdufWfvXcE4AzCdA0Ss1FXT+veo77KMNKLSHGIwk=;
b=Cp8WKpafUTTTVbqGM5/PSakZmK7a/axMNEU7uzZ6AV/wJ0j2a8mFLc3hmrJUQCMu+6
NAquwS5/FUEAVhdRjjFBZTHXGltdDI7s/6WuA4w5GsJ1KRXFBdTZXrUnybR2E3v/67Tp
y7lKbncK06ELiUL0cPZ4vNsLO9SYzIXBWIm1eTX/kF5JakZOR1osiIURWC1FjALmFjyz
cVZpILjFiZaMSbijwH5XgfJL0gllQMSlSyp8GTOaC5z0bkenLPW/T55X2QBKFXbwMkXm
EWxgvaQdGP3tbOYVgqcpPfrYrw7Un2cQ0Zh5/abBHbqXrDE88sWDZJ79RF3I+XoIUEr+
wssQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20210112;
h=x-gm-message-state:mime-version:in-reply-to:references:from:date
:message-id:subject:to:cc;
bh=Oj1UdufWfvXcE4AzCdA0Ss1FXT+veo77KMNKLSHGIwk=;
b=8J35EQ8py+txxTqFPeQ4dKkH2Fy/QuEMqUlQNsIKugFnj3K1RqgwjyWsCV/ldbrUNV
vCVHWMFcc7O+8dsdkMii4O/mLuS07cB9RnCknDqcdAKsoKDSVTLB1dafFJC8KOObYKKL
ozp2Lb6q2npByO0XIpeIY4gHmgDb36Ah4VVXDqlQeOrQ2m8IF4B2Nk/bQ+yZ3Ql2t+fQ
rL0g1t6Cq1oCnrRPkhFD2tlC4RNvr7sUAReXSV8LAQmHdbfU8pEYgO+tBZWIdySpu4Jj
hstJUL82HWITI6eXtGWMbxXC8XTHgAqYuxA3uJne9jjXAsr2k0/dgf6a+eHbWs3b2GC2
FPzg==
X-Gm-Message-State: AOAM530NsxTcn74utvmOIYzp70m2DEH9AugHxJAZaD/0kN2wjQiKXzMO
U5E2/kUWXweqlYt2rlFyMV7j86P1vKz3b4hlMojaPNxY
X-Google-Smtp-Source: ABdhPJzy2sZpBfKa9o5kpLGtg6dlm97053ft6pki95eTzxUx7C3r5z3fTnWuztGq+CD5W+n99bbri/4M43j+pdmJ3eQ=
X-Received: by 2002:aa7:88c5:0:b0:44e:20c:1f26 with SMTP id
k5-20020aa788c5000000b0044e020c1f26mr16820739pff.22.1635144502655; Sun, 24
Oct 2021 23:48:22 -0700 (PDT)
In-Reply-To: <GetAsyncKeyState-20211025031639@ram.dialup.fu-berlin.de>
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.35
Precedence: list
List-Id: General discussion list for the Python programming language
<python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
<mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
<mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <CACL+1at6LwSEu6_Rbe1o3hC12X8TeX5K7hbWC=AurVbiiiEXXA@mail.gmail.com>
X-Mailman-Original-References: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
<GetAsyncKeyState-20211025031639@ram.dialup.fu-berlin.de>
 by: Eryk Sun - Mon, 25 Oct 2021 06:48 UTC

On 10/24/21, Stefan Ram <ram@zedat.fu-berlin.de> wrote:
> ram@zedat.fu-berlin.de (Stefan Ram) writes:
>>tab_down_hllDll.GetKeyState(tab_down_VK_TAB) & 0b1000000000000000
>
> In the meantime, I read about "GetAsyncKeyState". I thought that
> this would solve my problem, but no.

Odd. It works for me in the classic console and the Windows Terminal
pseudoconsole. The tab key's up/down state is updated immediately.

import ctypes
import msvcrt
import time

kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
user32 = ctypes.WinDLL('user32', use_last_error=True)

VK_TAB = 0x09

def tab_down():
return bool(user32.GetAsyncKeyState(VK_TAB) & 0x8000)

def flush_console_input():
"""Flush the input buffer of the process (pseudo)console."""
try:
with open('conin$') as f:
h = msvcrt.get_osfhandle(f.fileno())
kernel32.FlushConsoleInputBuffer(h)
except OSError:
pass

def test():
for i in range(100):
print('tab down:', tab_down())
time.sleep(0.1)
flush_console_input()

test()

Flushing the console input buffer isn't necessary. I just prefer it
instead of leaving the key presses in the buffer.

Usually a GUI wants GetKeyState() instead, which is synchronized with
input messages in the thread's message queue as they're processed. But
GetAsyncKeyState() should do what you want, if you don't need
synchronization with input messages.

Re: [tkinter][Windows]Unexpected state report for the tab key

<mailman.32.1635164417.23718.python-list@python.org>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=20125&group=comp.lang.python#20125

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: rob.cliffe@btinternet.com (Rob Cliffe)
Newsgroups: comp.lang.python
Subject: Re: [tkinter][Windows]Unexpected state report for the tab key
Date: Mon, 25 Oct 2021 13:13:46 +0100
Lines: 15
Message-ID: <mailman.32.1635164417.23718.python-list@python.org>
References: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
<4a5e6483-f304-2751-840f-501db2c96710@btinternet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Trace: news.uni-berlin.de 8iX5g0YIrI1shErRd5+yqg7ZT8IvqQDltKyXfFZ5vDSA==
Return-Path: <rob.cliffe@btinternet.com>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="2048-bit key; unprotected key"
header.d=btinternet.com header.i=@btinternet.com header.b=RZrQr1eS;
dkim-adsp=pass; dkim-atps=neutral
X-Spam-Status: OK 0.003
X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'ram': 0.07;
'subject:Windows': 0.07; 'tab': 0.07; 'tkinter': 0.07; 'problem?':
0.09; 'received:192.168.1.64': 0.09; 'slide': 0.09; 'subject:][':
0.09; 'wxpython': 0.09; "(i'm": 0.16; 'subject:tab': 0.16;
'subject:tkinter': 0.16; 'trap': 0.16; 'wrote:': 0.16; 'solve':
0.19; 'to:addr:python-list': 0.20; 'subject:: [': 0.21; 'returns':
0.22; '(and': 0.25; 'stefan': 0.26; 'header:User-Agent:1': 0.30;
'received:192.168.1': 0.32; 'but': 0.32; 'subject:for': 0.33;
'header:In-Reply-To:1': 0.34; 'received:192.168': 0.37; 'still':
0.40; 'received:213': 0.40; 'wishes': 0.40; 'best': 0.61; 'key':
0.64; 'subject:]': 0.70; 'moment': 0.81; 'released.': 0.84; 'rob':
0.84; 'pressed': 0.93
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=btinternet.com;
s=btmx201904; t=1635164025;
bh=z+spp6KcgPuTUZN3yvqkq6b4awd/0fGP4I4t224blDE=;
h=Subject:To:References:From:Message-ID:Date:MIME-Version:In-Reply-To;
b=RZrQr1eSrUIWViXHLgCrJq1Bi9fiZwumZrtwdwzE+2xTUHTMMdNm4WiFs+zxddteA2fmW5u4UswYsohDum4HX98/cdIJuJ7dfwLD/Z90cc2Htf7jYE/k6xRzo5RA+QeQ4LOk89NzVS1RyQThxxqcIWaSG/M8WMbp2TQSlYGTdol8GP9GbbRrbuaUpT+88IgqVSt/zKmmMUdmWbhBtX1OxUP+6BJ29wwzyjb7GDYByozJa+XLrVKM6rv6pwbfWTO8dQluw+K68bsz8PQk8fUk0eaR28YGQxwjXREapw2BIsjaipoSlPDeDwTO/B+ZqF6iKbgtMfTxNb5BPW6mVWuqVA==
Authentication-Results: btinternet.com;
auth=pass (PLAIN) smtp.auth=rob.cliffe@btinternet.com;
bimi=skipped
X-SNCR-Rigid: 613A901C0667B191
X-Originating-IP: [81.154.32.189]
X-OWM-Source-IP: 81.154.32.189 (GB)
X-OWM-Env-Sender: rob.cliffe@btinternet.com
X-VadeSecure-score: verdict=clean score=0/300, class=clean
X-RazorGate-Vade: gggruggvucftvghtrhhoucdtuddrgedvtddrvdefhedggeekucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuueftkffvkffujffvgffngfevqffopdfqfgfvnecuuegrihhlohhuthemuceftddunecunecujfgurhepuffvfhfhkffffgggjggtgfesthejredttdefjeenucfhrhhomheptfhosgcuvehlihhffhgvuceorhhosgdrtghlihhffhgvsegsthhinhhtvghrnhgvthdrtghomheqnecuggftrfgrthhtvghrnhepueffheefjedvueevveefjeetkeeggffhkeefhfekvefguefgvedujeeuvdehudefnecukfhppeekuddrudehgedrfedvrddukeelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehhvghloheplgduledvrdduieekrddurdeigegnpdhinhgvthepkedurdduheegrdefvddrudekledpmhgrihhlfhhrohhmpehrohgsrdgtlhhifhhfvgessghtihhnthgvrhhnvghtrdgtohhmpdhrtghpthhtohepphihthhhohhnqdhlihhsthesphihthhhohhnrdhorhhg
X-RazorGate-Vade-Verdict: clean 0
X-RazorGate-Vade-Classification: clean
X-SNCR-hdrdom: btinternet.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.14.0
In-Reply-To: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
Content-Language: en-GB
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.35
Precedence: list
List-Id: General discussion list for the Python programming language
<python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
<mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
<mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <4a5e6483-f304-2751-840f-501db2c96710@btinternet.com>
X-Mailman-Original-References: <slideshow-20211025021820@ram.dialup.fu-berlin.de>
 by: Rob Cliffe - Mon, 25 Oct 2021 12:13 UTC

On 25/10/2021 02:57, Stefan Ram wrote:
> GetKeyState still returns that the tab key
> is pressed after the tab key already has been released.
> Well, how then am I going to make my slide show stop the
> moment the key is being released?
>
>
Does tkinter allow you to trap KeyUp (and KeyDown) events?
(I'm not familiar with tkinter, but in wxpython you can.)
And if so, does trapping KeyUp solve the problem?
Best wishes
Rob Cliffe

Re: [tkinter][Windows]Unexpected state report for the tab key

<answers-20211025201919@ram.dialup.fu-berlin.de>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=20135&group=comp.lang.python#20135

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!paganini.bofh.team!news.dns-netz.com!news.freedyn.net!newsreader4.netcologne.de!news.netcologne.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.lang.python
Subject: Re: [tkinter][Windows]Unexpected state report for the tab key
Date: 25 Oct 2021 19:23:19 GMT
Organization: Stefan Ram
Lines: 23
Expires: 1 Dec 2021 11:59:58 GMT
Message-ID: <answers-20211025201919@ram.dialup.fu-berlin.de>
References: <slideshow-20211025021820@ram.dialup.fu-berlin.de> <mailman.32.1635164417.23718.python-list@python.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de 6aP2toO1MVoFGgG7JbvKTwUpuh7juv2ruRXA/0w6rxi4fW
X-Copyright: (C) Copyright 2021 Stefan Ram. All rights reserved.
Distribution through any means other than regular usenet
channels is forbidden. It is forbidden to publish this
article in the Web, to change URIs of this article into links,
and to transfer the body without this notice, but quotations
of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
services to mirror the article in the web. But the article may
be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Accept-Language: de-DE, en-US, it, fr-FR
 by: Stefan Ram - Mon, 25 Oct 2021 19:23 UTC

Rob Cliffe <rob.cliffe@btinternet.com> writes:
>Does tkinter allow you to trap KeyUp (and KeyDown) events?
>(I'm not familiar with tkinter, but in wxpython you can.)

Thanks for all the answers, including answers by Eryk and Rob!

In the meantime, I have found that using "GetAsyncKeyState"
in my actual slide show program seems to work (while it
still seems to lag behind in my small test program).

To answer Rob's questions:

Yes, one can use:

widget.bind( "<KeyRelease-Tab>", callback )

to get reports about a release of the tab key.

>And if so, does trapping KeyUp solve the problem?

No, this also lagged behind.


devel / comp.lang.python / Re: [tkinter][Windows]Unexpected state report for the tab key

1
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor