虛擬鍵盤使用 PyAutoGUI 套件,而此套件在 Linux 需使用 root 執行。
首先需把sudo 改成無需密碼執行
sudo visudo
todo 圖片
所以請在撰寫程式完後,比如 keybord.py,然 keyboard.py 改成可執行檔
sudo chmod 755 ./keyboard.py
然後在桌面新增 keyboard.sh 檔,內容如下
#!/bin/bash sudo /home/thomas/cashier/keyboard.py
keyboard.sh 也要改成可執行檔
sudo chmod 755 /home/thomas/Desktop/keyboard.sh
UI設計
虛擬鍵盤的設計, 必需將每個按鈕的 focusPolicy 設定為 NoFocus

PyAutoGui
此套件為自動化測試工具, 可以模擬鍵盤按下事件. 由 C語言寫成.
請先pip3 install PyAutoGUI套件
完整代碼
#!/usr/bin/python3
import sys
import pyautogui
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
from ui.ui_keyboard import *
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.btns=[]
self.caps=True
for w in self.__dict__.keys():
if 'pushButton' in w:
cmd='self.btns.append(self.{:s})'.format(w)
exec(cmd)
for btn in self.btns:
btn.clicked.connect(self.btn_click)
def btn_click(self, event):
btn=self.sender()
print(btn.text())
if btn.text()=='&&':
pyautogui.press('&')
elif btn.text().lower()=='shift':
if self.caps:
for btn in self.btns:
btn.setText(btn.text().lower())
self.caps=False
else:
for btn in self.btns:
btn.setText(btn.text().upper())
self.caps = True
else:
pyautogui.press(btn.text())
if __name__ == "__main__":
app = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
app.exec()
ui_keyboard.ui代碼
開機自動啟動程式碼
todo
