URI: 
       tqt.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       tqt.py (1738B)
       ---
            1 import random
            2 
            3 from PyQt5.QtWidgets import (QVBoxLayout, QGridLayout, QPushButton)
            4 
            5 from electrum.plugin import BasePlugin, hook
            6 from electrum.i18n import _
            7 
            8 
            9 class Plugin(BasePlugin):
           10     vkb = None
           11     vkb_index = 0
           12 
           13     @hook
           14     def password_dialog(self, pw, grid, pos):
           15         vkb_button = QPushButton(_("+"))
           16         vkb_button.setFixedWidth(20)
           17         vkb_button.clicked.connect(lambda: self.toggle_vkb(grid, pw))
           18         grid.addWidget(vkb_button, pos, 2)
           19         self.kb_pos = 2
           20         self.vkb = None
           21 
           22     def toggle_vkb(self, grid, pw):
           23         if self.vkb:
           24             grid.removeItem(self.vkb)
           25         self.vkb = self.virtual_keyboard(self.vkb_index, pw)
           26         grid.addLayout(self.vkb, self.kb_pos, 0, 1, 3)
           27         self.vkb_index += 1
           28 
           29     def virtual_keyboard(self, i, pw):
           30         i = i % 3
           31         if i == 0:
           32             chars = 'abcdefghijklmnopqrstuvwxyz '
           33         elif i == 1:
           34             chars = 'ABCDEFGHIJKLMNOPQRTSUVWXYZ '
           35         elif i == 2:
           36             chars = '1234567890!?.,;:/%&()[]{}+-'
           37 
           38         n = len(chars)
           39         s = []
           40         for i in range(n):
           41             while True:
           42                 k = random.randint(0, n - 1)
           43                 if k not in s:
           44                     s.append(k)
           45                     break
           46 
           47         def add_target(t):
           48             return lambda: pw.setText(str(pw.text()) + t)
           49 
           50         vbox = QVBoxLayout()
           51         grid = QGridLayout()
           52         grid.setSpacing(2)
           53         for i in range(n):
           54             l_button = QPushButton(chars[s[i]])
           55             l_button.setFixedWidth(25)
           56             l_button.setFixedHeight(25)
           57             l_button.clicked.connect(add_target(chars[s[i]]))
           58             grid.addWidget(l_button, i // 6, i % 6)
           59 
           60         vbox.addLayout(grid)
           61 
           62         return vbox