所以我刚开始用PyQt5。现在我只编写了一个按钮,它应该从行编辑中获取文本,将其存储在一个全局变量中,并将其放入文本浏览器中。现在它做到了。。。但是有问题。 在我单击其他程序/窗口,然后再次单击我的应用程序之前,文本浏览器不会更新 当行编辑被清除时,有一个错误,基本上文本没有被正确清除,但只是它的上半部分。当我再次输入时,这个就消失了。
我尝试为小部件调用.update()方法QApplication.process_事件()
这是密码
from PyQt5 import QtCore, QtGui, QtWidgets
lyrics = ''
adlib = ' (Placeholder adlib)'
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(742, 680)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.addLineBtn = QtWidgets.QPushButton(self.centralwidget)
self.addLineBtn.setGeometry(QtCore.QRect(530, 0, 91, 51))
font = QtGui.QFont()
font.setFamily("Arial")
font.setItalic(True)
self.addLineBtn.setFont(font)
self.addLineBtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.addLineBtn.setObjectName("addLineBtn")
self.deleteBtn = QtWidgets.QPushButton(self.centralwidget)
self.deleteBtn.setGeometry(QtCore.QRect(120, 80, 91, 32))
self.deleteBtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.deleteBtn.setObjectName("deleteBtn")
self.saveBtn = QtWidgets.QPushButton(self.centralwidget)
self.saveBtn.setGeometry(QtCore.QRect(30, 80, 91, 32))
self.saveBtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.saveBtn.setObjectName("saveBtn")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(30, 20, 501, 51))
self.lineEdit.setObjectName("lineEdit")
self.dialLabel = QtWidgets.QLabel(self.centralwidget)
self.dialLabel.setGeometry(QtCore.QRect(640, 20, 71, 16))
self.dialLabel.setObjectName("dialLabel")
self.rtdSlider = QtWidgets.QSlider(self.centralwidget)
self.rtdSlider.setGeometry(QtCore.QRect(620, 40, 101, 22))
self.rtdSlider.setOrientation(QtCore.Qt.Horizontal)
self.rtdSlider.setObjectName("rtdSlider")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(20, 120, 701, 501))
self.textBrowser.setObjectName("textBrowser")
self.noadlibBtn = QtWidgets.QPushButton(self.centralwidget)
self.noadlibBtn.setGeometry(QtCore.QRect(530, 50, 91, 51))
font = QtGui.QFont()
font.setFamily("Arial")
font.setItalic(True)
self.noadlibBtn.setFont(font)
self.noadlibBtn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.noadlibBtn.setObjectName("noadlibBtn")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 742, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.addLineBtn.clicked.connect(self.addLineAdlib)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.addLineBtn.setText(_translate("MainWindow", "Adlib"))
self.deleteBtn.setText(_translate("MainWindow", "Delete"))
self.saveBtn.setText(_translate("MainWindow", "Save"))
self.dialLabel.setText(_translate("MainWindow", "RTD Level"))
self.noadlibBtn.setText(_translate("MainWindow", "No Adlib"))
def addLineAdlib(self):
global lyrics
lyrics += self.lineEdit.text() + adlib + '\n'
self.lineEdit.clear()
self.textBrowser.setText(lyrics)
def addLineNoAdlib(self):
pass
def save(self):
pass
def deleteLine(self):
pass
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_())
这是一个更干净的、更具类化(pythonicpyqt)版本的程序,我把注释掉的东西放在里面,让你看看它应该在哪里,但是我删除了你的坐标系,用创建GUI的更标准的布局样式替换了它。在
我在win10上用python3.7pyqt5测试了这个问题,所以如果有操作系统的问题,你会知道的,但是我的猜测是,在某些地方出现了一个断开连接的问题,而这正是您遇到的问题。在
同样,你的按钮设计永远不会创建一个空白行,因为它总是把一些东西放在一行,我只需点击按钮而不输入任何东西
编辑:我有一个奇怪的箭头出现在我的屏幕上,它似乎QStyleFactory调用删除了,我调整了StatusBar声明,使其更模块化,以防以后您想类化它
1
The text browser does NOT update until I click another program/window and then click my app again
-此问题可能与您的操作系统有关。我在Ubuntu16.04上有错误的PyQT5行为,而在ubuntu18.04上一切正常。你能分享更多信息吗?注意:我在Ubuntu18.04上测试了你的脚本,我不需要点击其他程序/窗口来刷新它
2
When the line edit is cleared there is a bug which is basically text not being cleared properly but only it's top half. This goes away when I type again.
-你能解释一下你说的it's top half
是什么意思吗?如果您的意思是仍然存在(Placeholder adlib)
文本,那么在向歌词变量添加内容之前,您应该修改函数以选中lineEdit
文本框。例如,像这样:相关问题 更多 >
编程相关推荐