PyQt5:文本框在 windows 11 中不工作
PyQt5: Textbox's Not working in windows 11
我最近切换到 windows11 并决定开始一个 QyQt5 项目,我开始添加按钮,效果很好。但是当我尝试在文本框中输入时,它不会显示文本也不会输入任何内容。它唯一显示的是我突出显示了文本框。可悲的是,没有错误或日志显示它为什么会这样。
这是发生了什么:
这是我使用的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(332, 121)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Download = QtWidgets.QPushButton(self.centralwidget)
self.Download.setGeometry(QtCore.QRect(240, 70, 75, 23))
self.Download.setObjectName("Download")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 70, 75, 23))
self.pushButton.setObjectName("pushButton")
self.linkbox = QtWidgets.QPlainTextEdit(self.centralwidget)
self.linkbox.setGeometry(QtCore.QRect(23, 30, 291, 21))
self.linkbox.setToolTipDuration(-5)
self.linkbox.setLayoutDirection(QtCore.Qt.LeftToRight)
self.linkbox.setInputMethodHints(QtCore.Qt.ImhMultiLine|QtCore.Qt.ImhNoEditMenu)
self.linkbox.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.linkbox.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
self.linkbox.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.linkbox.setTabChangesFocus(True)
self.linkbox.setPlainText("")
self.linkbox.setObjectName("linkbox")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "ChaosCapture"))
self.Download.setText(_translate("MainWindow", "Download"))
self.pushButton.setText(_translate("MainWindow", "Options"))
self.linkbox.setPlaceholderText(_translate("MainWindow", "Enter the download link here"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
您为 QPlainTextEdit 使用了非常小的高度,并且它完全被水平滚动条覆盖(您已将其设置为始终打开)。
您也没有使用layout managers,这是非常令人沮丧的。例如,用户可以调整 window 的大小并使其变小,这样小部件就可以部分可见或完全隐藏。布局管理器应始终优先于预定的几何形状。
应该做三件事:
- 设置一个 layout in Designer,在你的情况下网格布局会很好:右键单击 window 的空白区域,打开“布局”菜单和 select “布置在网格中”;
- 为纯文本编辑设置任意最小高度(以便您可以在设计器中调整window);
- 在程序脚本中,根据字体指标;
设置小部件的最小高度
请注意,程序脚本 必须 是一个单独的文件,而不是您向我们展示的文件(pyuic 文件),出于任何原因必须 永远不会 进行手动编辑(阅读有关 using Designer 的更多信息)。
以下代码假定pyuic文件名为ui_mainwindow.py
.
from PyQt5 import QtWidgets
from ui_mainwindow import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.linkbox.setMinimumHeight(
self.fontMetrics().height() +
self.linkbox.frameWidth() * 2 +
self.linkbox.document().documentMargin() * 2 +
self.linkbox.horizontalScrollBar().sizeHint().height()
)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
注意:隐藏垂直滚动条不是一个好主意。您要么使用 QLineEdit,要么至少应该使 QPlainTextEdit 高一点(self.fontMetrics().height() * 2 + ...
),否则如果用户错误地按下 Enter 键,将会非常混乱或用新行粘贴文本。
我最近切换到 windows11 并决定开始一个 QyQt5 项目,我开始添加按钮,效果很好。但是当我尝试在文本框中输入时,它不会显示文本也不会输入任何内容。它唯一显示的是我突出显示了文本框。可悲的是,没有错误或日志显示它为什么会这样。
这是发生了什么:
这是我使用的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(332, 121)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Download = QtWidgets.QPushButton(self.centralwidget)
self.Download.setGeometry(QtCore.QRect(240, 70, 75, 23))
self.Download.setObjectName("Download")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 70, 75, 23))
self.pushButton.setObjectName("pushButton")
self.linkbox = QtWidgets.QPlainTextEdit(self.centralwidget)
self.linkbox.setGeometry(QtCore.QRect(23, 30, 291, 21))
self.linkbox.setToolTipDuration(-5)
self.linkbox.setLayoutDirection(QtCore.Qt.LeftToRight)
self.linkbox.setInputMethodHints(QtCore.Qt.ImhMultiLine|QtCore.Qt.ImhNoEditMenu)
self.linkbox.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.linkbox.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
self.linkbox.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.linkbox.setTabChangesFocus(True)
self.linkbox.setPlainText("")
self.linkbox.setObjectName("linkbox")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "ChaosCapture"))
self.Download.setText(_translate("MainWindow", "Download"))
self.pushButton.setText(_translate("MainWindow", "Options"))
self.linkbox.setPlaceholderText(_translate("MainWindow", "Enter the download link here"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
您为 QPlainTextEdit 使用了非常小的高度,并且它完全被水平滚动条覆盖(您已将其设置为始终打开)。
您也没有使用layout managers,这是非常令人沮丧的。例如,用户可以调整 window 的大小并使其变小,这样小部件就可以部分可见或完全隐藏。布局管理器应始终优先于预定的几何形状。
应该做三件事:
- 设置一个 layout in Designer,在你的情况下网格布局会很好:右键单击 window 的空白区域,打开“布局”菜单和 select “布置在网格中”;
- 为纯文本编辑设置任意最小高度(以便您可以在设计器中调整window);
- 在程序脚本中,根据字体指标; 设置小部件的最小高度
请注意,程序脚本 必须 是一个单独的文件,而不是您向我们展示的文件(pyuic 文件),出于任何原因必须 永远不会 进行手动编辑(阅读有关 using Designer 的更多信息)。
以下代码假定pyuic文件名为ui_mainwindow.py
.
from PyQt5 import QtWidgets
from ui_mainwindow import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.linkbox.setMinimumHeight(
self.fontMetrics().height() +
self.linkbox.frameWidth() * 2 +
self.linkbox.document().documentMargin() * 2 +
self.linkbox.horizontalScrollBar().sizeHint().height()
)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
注意:隐藏垂直滚动条不是一个好主意。您要么使用 QLineEdit,要么至少应该使 QPlainTextEdit 高一点(self.fontMetrics().height() * 2 + ...
),否则如果用户错误地按下 Enter 键,将会非常混乱或用新行粘贴文本。