#python-3.x #pyqt5 #qlineedit
#python-3.x #pyqt5 #qlineedit
Вопрос:
Проблема
Я хочу убрать фокус, QLineEdit
когда я нажимаю где-то еще в окне.
Я использую PyQt5 в Python 3.9.7 в Windows 10. Я также искал об этом в Google, youtube и stackoverflow. Но, похоже, api устарел / не для PyQt5.
Код
Я создавал средство сокращения URL только для образовательных целей (Cz Я новичок:)
, И я использую свой собственный класс Entrybox
, который является родительским для QLineEdit
Here is the code:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from requests import get
from pyperclip import copy
from keyboard import add_hotkey
class Entrybox(QtWidgets.QLineEdit):
pass
class Ui_window(object):
def setupUi(self, window):
self.win=window
self.win.setFixedSize(400, 247)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(10)
window.setFont(font)
window.setAutoFillBackground(False)
window.setStyleSheet("background-color: #484848;")
window.setUnifiedTitleAndToolBarOnMac(False)
self.centralwidget = QtWidgets.QWidget(window)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 10, 400, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(20)
self.label.setFont(font)
self.label.setStyleSheet("color:#fff;")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.boxurl = Entrybox(self.centralwidget)
self.boxurl.setGeometry(QtCore.QRect(10, 60, 380, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(12)
self.boxurl.setFont(font)
self.boxurl.setStyleSheet("Entrybox {n"
"background-color: #595959;n"
"border:0px;n"
"color:#ffffff;n"
"selection-color: #ffffff;n"
"selection-background-color: #484848;n"
"border-radius: 15px;n"
"}n"
"Entrybox:hover {n"
"background-color: #636363;n"
"}n"
"Entrybox:focus {n"
"background-color: #636363;n"
"}")
self.boxurl.setAlignment(QtCore.Qt.AlignCenter)
self.boxurl.setObjectName("boxurl")
self.gobtn = QtWidgets.QPushButton(self.centralwidget)
self.gobtn.setGeometry(QtCore.QRect(160, 160, 81, 41))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.gobtn.setFont(font)
self.gobtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.gobtn.setStyleSheet("QPushButton {n"
"background-color: #505050;n"
"border:0px;n"
"color:#ffffff;n"
"border-radius:15px;n"
"}n"
"QPushButton:hover {n"
"background-color: #595959;n"
"}n"
"QPushButton:pressed {n"
"background-color: #636363;n"
"}")
self.gobtn.setObjectName("gobtn")
self.boxname = Entrybox(self.centralwidget)
self.boxname.setGeometry(QtCore.QRect(10, 110, 380, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(12)
self.boxname.setFont(font)
self.boxname.setStyleSheet("Entrybox {n"
"background-color: #595959;n"
"border:0px;n"
"color:#ffffff;n"
"selection-color: #ffffff;n"
"selection-background-color: #484848;n"
"border-radius: 15px;n"
"}n"
"Entrybox:hover {n"
"background-color: #636363;n"
"}n"
"Entrybox:focus {n"
"background-color: #636363;n"
"}")
self.boxname.setAlignment(QtCore.Qt.AlignCenter)
self.boxname.setObjectName("boxname")
self.status = QtWidgets.QLabel(self.centralwidget)
self.status.setGeometry(QtCore.QRect(0, 210, 400, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(15)
self.status.setFont(font)
self.status.setStyleSheet("color:#fff;")
self.status.setAlignment(QtCore.Qt.AlignCenter)
self.status.setObjectName("status")
self.titlelabel = QtWidgets.QLabel(self.centralwidget)
self.titlelabel.setGeometry(QtCore.QRect(10, 250, 36, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(12)
self.titlelabel.setFont(font)
self.titlelabel.setStyleSheet("color:#fff;")
self.titlelabel.setObjectName("titlelabel")
self.boxtitle = Entrybox(self.centralwidget)
self.boxtitle.setGeometry(QtCore.QRect(55, 250, 336, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(12)
self.boxtitle.setFont(font)
self.boxtitle.setStyleSheet("Entrybox {n"
"background-color: #595959;n"
"border:0px;n"
"color:#ffffff;n"
"selection-color: #ffffff;n"
"selection-background-color: #484848;n"
"border-radius: 15px;n"
"}n"
"Entrybox:hover {n"
"background-color: #636363;n"
"}n"
"Entrybox:focus {n"
"background-color: #636363;n"
"}")
self.boxtitle.setAlignment(QtCore.Qt.AlignCenter)
self.boxtitle.setObjectName("boxtitle")
self.urllabel = QtWidgets.QLabel(self.centralwidget)
self.urllabel.setGeometry(QtCore.QRect(10, 300, 99, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(12)
self.urllabel.setFont(font)
self.urllabel.setStyleSheet("color:#fff;")
self.urllabel.setObjectName("urllabel")
self.boxshorturl = Entrybox(self.centralwidget)
self.boxshorturl.setGeometry(QtCore.QRect(115, 300, 277, 31))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(12)
self.boxshorturl.setFont(font)
self.boxshorturl.setStyleSheet("Entrybox {n"
"background-color: #595959;n"
"border:0px;n"
"color:#ffffff;n"
"selection-color: #ffffff;n"
"selection-background-color: #484848;n"
"border-radius: 15px;n"
"}n"
"Entrybox:hover {n"
"background-color: #636363;n"
"}n"
"Entrybox:focus {n"
"background-color: #636363;n"
"}")
self.boxshorturl.setAlignment(QtCore.Qt.AlignCenter)
self.boxshorturl.setObjectName("boxshorturl")
self.copybtn = QtWidgets.QPushButton(self.centralwidget)
self.copybtn.setGeometry(QtCore.QRect(160, 340, 81, 41))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.copybtn.setFont(font)
self.copybtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.copybtn.setStyleSheet("QPushButton {n"
"background-color: #505050;n"
"border:0px;n"
"color:#ffffff;n"
"border-radius:15px;n"
"}n"
"QPushButton:hover {n"
"background-color: #595959;n"
"}n"
"QPushButton:pressed {n"
"background-color: #636363;n"
"}")
self.copybtn.setObjectName("copybtn")
window.setFocus()
window.setCentralWidget(self.centralwidget)
self.retranslateUi(window)
self.UiSetup()
QtCore.QMetaObject.connectSlotsByName(window)
def retranslateUi(self, window):
_translate = QtCore.QCoreApplication.translate
window.setWindowTitle(_translate("window", "URL Shortener Online"))
self.label.setText(_translate("window", "URL Shortener Online"))
self.gobtn.setText(_translate("window", "Go"))
self.status.setText(_translate("window", ""))
self.titlelabel.setText(_translate("window", "Title:"))
self.urllabel.setText(_translate("window", "Shorten URL:"))
self.copybtn.setText(_translate("window", "Copy"))
def UiSetup(self):
add_hotkey('ctrl c', self.copylink)
self.boxurl.setPlaceholderText('Enter Long URL')
self.boxname.setPlaceholderText('Enter Alias/Name (Optional)')
self.gobtn.clicked.connect(self.shortenit)
self.copybtn.clicked.connect(self.copylink)
self.titlelabel.setHidden(True)
self.boxtitle.setHidden(True)
self.urllabel.setHidden(True)
self.boxshorturl.setHidden(True)
self.copybtn.setHidden(True)
def showwarning(self,message,title='Error') -> str:
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText(message)
msg.setWindowTitle(title)
msg.exec_()
def shortenit(self):
url=self.boxurl.text()
if 'http' not in url:
url='http://' url
name=self.boxname.text()
if name=='':
api_url=f"https://cutt.ly/api/api.php?key=667cc3506cc77adad0b8503f2dfc8a2121930amp;short={url}"
else:
api_url=f'https://cutt.ly/api/api.php?key=667cc3506cc77adad0b8503f2dfc8a2121930amp;short={url}amp;name={name}'
try:
link=get(api_url).json()['url']
except:
self.showwarning('Please check your Internet Connection')
return
self.linkstatus=link['status']
if self.linkstatus==7:
self.status.setText('Done!')
pass
elif self.linkstatus==3:
self.showwarning('Alias/Name is already taken')
return
elif self.linkstatus==2:
self.showwarning('URL is Invalid or not supported')
return
elif self.linkstatus==5:
self.showwarning('Entered Alias/Name in not supported')
return
else:
self.showwarning('Something went wrong!')
return
self.shortlink=link['shortLink']
self.title=link['title']
self.titlelabel.setHidden(False)
self.boxtitle.setHidden(False)
self.urllabel.setHidden(False)
self.boxshorturl.setHidden(False)
self.copybtn.setHidden(False)
self.win.setFixedSize(400,400)
self.boxtitle.setText(self.title)
self.boxshorturl.setText(self.shortlink)
def copylink(self):
try:
copy(self.shortlink)
except:
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
ui = Ui_window()
ui.setupUi(window)
window.show()
sys.exit(app.exec_())
Комментарии:
1. Вы включили свой cutt. ly ключ API в вопросе. Возможно, это то, чего вы не хотели делать. Если да, то вы можете захотеть изменить свой ключ?
2. Спасибо. Но это API поддельной учетной записи, проверенный с помощью temp mail
3. Вы также, по-видимому, проигнорировали предупреждение в файле pyuic, который вы пытаетесь отредактировать, что должно явно указывать вам не изменять его. Хотя это не имеет прямого отношения к вашей проблеме, это все еще проблема. Пожалуйста, прочтите подробнее об использовании Конструктора .
4. почему вы не используете qt designer для настройки своего пользовательского интерфейса? так много закодированных вручную вещей, которые могут пойти не так. пусть qt designer сделает всю работу за вас. У меня никогда не было таких проблем.
5. Да, чувак! Я создал этот графический интерфейс с помощью Qt Designer. Затем преобразовал его в Python с помощью pyuic5. И еще одна вещь, эта проблема по умолчанию. Cz Я видел это, когда запускал его в Qt Designer. И я не редактировал функции setupUi и retranslateUi по умолчанию. Я только что добавил еще 4 функции.