Я создаю программу, используя pyqt5 и sqlite db.
это случайный выбор текста строки БД и отображение в виджете textbrowser и копирование в буфер обмена каждый раз, когда я нажимаю кнопку.
и с модуль клавиатуры, перехватив ctrl + v , затем проверьте виджет метки для повторения функции предыдущей нажатой кнопки.
Но когда я пу sh ctrl + v , это не работает в Pycharm с этим сообщением об ошибке
Process finished with exit code -1073740791 (0xC0000409)
И когда я запускаю код в терминале, снова с этим сообщением об ошибке
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTextDocument(0x207618a6770), parent's thread is QThread(0x2075f5acef0), current thread is QThread(0x20761d818d0)
Я думаю, может быть, проблема в теме. но я не использовал нить. Это изображение пользовательского интерфейса моего виджета pyqt5 и мой исходный код.
Как я могу заставить этот код работать?
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
import sqlite3
import random
import pyperclip
import keyboard
from time import sleep
form_class = uic.loadUiType("exam.ui")[0]
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
self.pb1.clicked.connect(self.bt1)
self.pb2.clicked.connect(self.bt2)
self.pb3.clicked.connect(self.bt3)
self.pb4.clicked.connect(self.bt4)
self.pb5.clicked.connect(self.bt5)
self.con = sqlite3.connect("exam.db")
self.cursor = self.con.cursor()
keyboard.add_hotkey("ctrl+v", self.kt)
def bt1(self):
self.lb1.clear()
self.tb.clear()
self.lb1.setText("a")
self.cursor.execute("SELECT max(rowid) FROM a")
maxrow = self.cursor.fetchone()
r = random.randrange(1, maxrow[0] + 1)
self.cursor.execute("SELECT * FROM a WHERE rowid =?", (r,))
t = self.cursor.fetchone()
self.tb.setPlainText(t[0])
pyperclip.copy(t[0] + "\n")
def bt2(self):
self.lb1.clear()
self.tb.clear()
self.lb1.setText("b")
self.cursor.execute("SELECT max(rowid) FROM b")
maxrow = self.cursor.fetchone()
r = random.randrange(1, maxrow[0] + 1)
self.cursor.execute("SELECT * FROM b WHERE rowid =?", (r,))
t = self.cursor.fetchone()
self.tb.setPlainText(t[0])
pyperclip.copy(t[0] + "\n")
def bt3(self):
self.lb1.clear()
self.tb.clear()
self.lb1.setText("c")
self.cursor.execute("SELECT max(rowid) FROM c")
maxrow = self.cursor.fetchone()
r = random.randrange(1, maxrow[0] + 1)
self.cursor.execute("SELECT * FROM c WHERE rowid =?", (r,))
t = self.cursor.fetchone()
self.tb.setPlainText(t[0])
pyperclip.copy(t[0] + "\n")
def bt4(self):
self.lb1.clear()
self.tb.clear()
self.lb1.setText("d")
self.cursor.execute("SELECT max(rowid) FROM d")
maxrow = self.cursor.fetchone()
r = random.randrange(1, maxrow[0] + 1)
self.cursor.execute("SELECT * FROM d WHERE rowid =?", (r,))
t = self.cursor.fetchone()
self.tb.setPlainText(t[0])
pyperclip.copy(t[0] + "\n")
def bt5(self):
self.lb1.clear()
self.tb.clear()
self.lb1.setText("e")
self.cursor.execute("SELECT max(rowid) FROM e")
maxrow = self.cursor.fetchone()
r = random.randrange(1, maxrow[0] + 1)
self.cursor.execute("SELECT * FROM e WHERE rowid =?", (r,))
t = self.cursor.fetchone()
self.tb.setPlainText(t[0])
pyperclip.copy(t[0] + "\n")
def kt(self):
if self.lb1.text() == "a":
self.bt1()
elif self.lb1.text == "b":
self.bt2()
elif self.lb1.text == "c":
self.bt3()
elif self.lb1.text == "d":
self.bt4()
elif self.lb1.text == "e":
self.bt5()
if __name__ == "__main__" :
app = QApplication(sys.argv)
myWindow = WindowClass()
myWindow.show()
app.exec_()
Ссылка на файл базы данных Ссылка на файл интерфейса пользователя
Я просто добавляю файл базы данных и интерфейса пользователя .