【问题标题】:PyQt5: Textbox's Not working in windows 11PyQt5:文本框在 Windows 11 中不起作用
【发布时间】:2022-01-21 12:18:56
【问题描述】:

我最近切换到 Windows 11 并决定启动一个 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_())

【问题讨论】:

    标签: python pyqt5


    【解决方案1】:

    您为 QPlainTextEdit 使用了一个非常小的高度,它被水平滚动条完全覆盖(您已将其设置为始终打开)。

    您也使用layout managers,这是非常不鼓励的。例如,用户可以调整窗口大小并使其更小,因此小部件可以部分可见或完全隐藏。布局管理器应始终优先于预先确定的几何形状。

    应该做三件事:

    1. 设置layout in Designer,在您的情况下,网格布局就可以了:右键单击窗口的空白区域,打开“布局”菜单并选择“在网格中布局”;
    2. 为纯文本编辑设置任意最小高度(以便您可以在设计器中调整窗口大小);
    3. 程序脚本中,根据字体指标设置小部件的最小高度;

    请注意,程序脚本必须是一个单独的文件,而不是您向我们展示的文件(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 键或粘贴带有 new 的文本,将会非常混乱行。

    【讨论】:

    • 谢谢你的帮助,但是如果不应该改变pyuic脚本,那么pyuic有什么意义呢?
    • @NaeemAhmed “不要编辑”并不意味着“不要使用”。您是否阅读了答案中的链接?
    • 是的,我已经阅读了链接
    • @NaeemAhmed 那你有什么不明白的?
    • 我很困惑为什么我不应该修改由pyuic5 生成或制作的python 文件,因为它没有显示任何警告
    猜你喜欢
    • 2017-08-30
    • 2017-09-04
    • 2012-02-10
    • 1970-01-01
    • 2022-08-15
    • 2014-04-15
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多