- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 PyQt5 中制作一个记事本,并且我正在制作一个能够在行之间导航的选项,当然,我需要移动文本编辑器光标,以便它位于用户想要的行中,并且问题是, Nose 如何移动TextEdit的光标。我使用了多种方法,但没有一个有效。简单的或者不移动光标或者错误跳转。
这是完整的代码:https://github.com/MasPot4/Bloc-de-Notas
这是错误的部分
import sys
from PyQt5 import QtGui
from PyQt5.QtGui import QTextCursor
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QMainWindow, QApplication, QTextEdit, QMessageBox, QLabel, QPushButton
from PyQt5.QtWidgets import QHBoxLayout, QWidget, QMenu, QAction, QFileDialog, QLineEdit
import tkinter
root = tkinter.Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
class textEdit(QTextEdit):
def __init__(self):
super(textEdit, self).__init__()
self.cursor = self.textCursor()
class gotolineWin(QMainWindow):
def __init__(self):
super(gotolineWin, self).__init__()
self.main = textEdit()
self.label = QLabel(self)
self.go_line = QLineEdit(self)
self.buttonGoto = QPushButton("Go to...", self)
self.buttonCancel = QPushButton("Cancel", self)
self.initUi()
def initUi(self):
self.label.setText("Go to...")
self.label.move(20, 0)
self.go_line.move(20, 25)
self.go_line.resize(260, 20)
self.buttonGoto.move(20, 60)
self.buttonGoto.resize(100, 30)
self.buttonGoto.clicked.connect(lambda: self.GoToLine(int(self.go_line.text())))
self.buttonCancel.clicked.connect(self.cancel)
self.buttonCancel.move(180, 60)
self.setGeometry((width / 2) - 150, (height / 2) - 50, 300, 100)
self.setWindowTitle("Go to...")
def GoToLine(self, line):
# self.main.cursor = self.main.textCursor()
# self.main.cursor.movePosition(self.main.cursor.Left, self.main.cursor.KeepAnchor, 3)
# self.main.setTextCursor(self.main.cursor)
ln = int(line)
linecursor = QTextCursor(self.main.document().findBlockByLineNumber(ln - 1))
self.main.moveCursor(QTextCursor.End, QTextCursor.MoveAnchor)
self.main.setTextCursor(linecursor)
self.close()
def cancel(self):
self.close()
class writter(QMainWindow):
def __init__(self):
super().__init__()
self.textEdit = textEdit()
self.lineWin = gotolineWin()
self.setCentralWidget(self.textEdit)
self.file_name = None
self.initUi()
def initUi(self):
menubar = self.menuBar()
fileMenu = menubar.addMenu('File')
editMenu = menubar.addMenu('Edit')
formatMenu = menubar.addMenu('Format')
viewMenu = menubar.addMenu("View")
# File Menu
new_file = QAction('New', self)
new_file.setShortcut("Ctrl+N")
new_file.triggered.connect(self.newfile)
open_file = QAction('Open...', self)
open_file.setShortcut("Ctrl+O")
open_file.triggered.connect(self.openfile)
save_file = QAction('Save', self)
save_file.setShortcut("Ctrl+S")
save_file.triggered.connect(self.savefile)
save_as_file = QAction('Save As...', self)
save_as_file.setShortcut("Ctrl+Shift+S")
save_as_file.triggered.connect(self.saveasfile)
exit = QAction("Exit", self)
exit.triggered.connect(self.quit)
# Edit Menu
undo_edit = QAction("Undo", self)
undo_edit.setShortcut("Ctrl+Z")
undo_edit.triggered.connect(self.undo)
cut_edit = QAction("Cut", self)
cut_edit.setShortcut("Ctrl+X")
cut_edit.triggered.connect(self.cut)
copy_edit = QAction("Copy", self)
copy_edit.setShortcut("Ctrl+C")
copy_edit.triggered.connect(self.copy)
paste_edit = QAction("Paste", self)
paste_edit.setShortcut("Ctrl+V")
paste_edit.triggered.connect(self.paste)
delete_edit = QAction("Delete", self)
delete_edit.setShortcut("Supr")
delete_edit.triggered.connect(self.delete)
goto_edit = QAction("Go To...", self)
goto_edit.setShortcut("Ctrl+T")
goto_edit.triggered.connect(self.gotoline)
find_editor = QAction("Find", self)
find_editor.setShortcut("Ctrl+F")
select_all_edit = QAction("Select All", self)
select_all_edit.setShortcut("Ctrl+E")
time_edit = QAction("Date and Time", self)
time_edit.setShortcut("F5")
# Format Menu
font_format = QAction("Font", self)
# View Menu
zoom_view = QMenu("Zoom", self)
zoom_mas_view = QAction("Zoom In", self)
zoom_mas_view.setShortcut("Ctrl++")
zoom_menos_view = QAction("Ward Off", self)
zoom_menos_view.setShortcut("Ctrl+-")
zoom_pre_view = QAction("Restore Default Zoom", self)
zoom_pre_view.setShortcut("Ctrl+0")
zoom_view.addAction(zoom_mas_view)
zoom_view.addAction(zoom_menos_view)
zoom_view.addAction(zoom_pre_view)
statusbar_view = QAction("Status Bar", self)
fileMenu.addAction(new_file)
fileMenu.addAction(open_file)
fileMenu.addAction(save_file)
fileMenu.addAction(save_as_file)
fileMenu.addSeparator()
fileMenu.addAction(exit)
editMenu.addAction(undo_edit)
editMenu.addSeparator()
editMenu.addAction(cut_edit)
editMenu.addAction(copy_edit)
editMenu.addAction(paste_edit)
editMenu.addAction(delete_edit)
editMenu.addSeparator()
editMenu.addAction(goto_edit)
editMenu.addAction(find_editor)
editMenu.addSeparator()
editMenu.addAction(select_all_edit)
editMenu.addAction(time_edit)
viewMenu.addMenu(zoom_view)
viewMenu.addAction(statusbar_view)
self.setGeometry((width / 2) - 300, (height / 2) - 250, 600, 500)
self.setWindowTitle("NotePad 2.0")
self.show()
def newfile(self):
if self.textEdit.toPlainText() != "":
buttonReply = QMessageBox.question(self, 'Bloc de Notas 2.0', f"You want to save changes to Sin Titulo?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if buttonReply == QMessageBox.Yes:
self.saveasfile()
else:
try:
name, _ = QFileDialog.getSaveFileName(self, "New File", "New File.txt", "All Files (*.*)")
url = QUrl.fromLocalFile(name)
name = url.fileName()
with open(name, "w") as f:
f.write("")
self.textEdit.clear()
self.file_name = name
except FileNotFoundError:
pass
else:
try:
name, _ = QFileDialog.getSaveFileName(self, "New File", "New File.txt", "All Files (*.*)")
url = QUrl.fromLocalFile(name)
name = url.fileName()
with open(name, "w") as f:
f.write("")
self.textEdit.clear()
self.file_name = name
except FileNotFoundError:
pass
def openfile(self):
if self.textEdit.toPlainText() != "":
buttonReply = QMessageBox.question(self, 'Bloc de Notas 2.0', f"You want to save changes to Sin Titulo?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if buttonReply == QMessageBox.Yes:
self.saveasfile()
else:
try:
name, _ = QFileDialog.getOpenFileName(self, "New File", "New File.txt", "All Files (*.*)")
url = QUrl.fromLocalFile(name)
name = url.fileName()
with open(name, "r") as f:
content = f.read()
self.textEdit.setText(content)
except FileNotFoundError:
pass
else:
try:
name, _ = QFileDialog.getOpenFileName(self, "New File", "New File.txt", "All Files (*.*)")
url = QUrl.fromLocalFile(name)
name = url.fileName()
with open(name, "r") as f:
content = f.read()
self.textEdit.setText(content)
except FileNotFoundError:
pass
def savefile(self):
if self.textEdit.toPlainText() == "":
self.newfile()
elif self.textEdit.toPlainText() != "":
if self.file_name == None:
self.saveasfile()
else:
with open(self.file_name, "w") as f:
f.write(self.textEdit.toPlainText())
elif self.file_name == None:
self.saveasfile()
def saveasfile(self):
try:
name, _ = QFileDialog.getSaveFileName(self,'Save File', "New File.txt", "All Files (*.*)")
with open(name, "w") as f:
f.write(self.textEdit.toPlainText())
self.file_name = name
except FileNotFoundError:
pass
def quit(self):
sys.exit()
def undo(self):
self.textEdit.undo()
def cut(self):
self.textEdit.copy()
self.textEdit.insertPlainText("")
def copy(self):
self.textEdit.copy()
def paste(self):
text = QApplication.clipboard().text()
self.textEdit.insertPlainText(text)
def delete(self):
self.textEdit.insertPlainText("")
def gotoline(self):
self.lineWin.show()
app = QApplication(sys.argv)
Window = writter()
sys.exit(app.exec_())
最佳答案
您正在 gotolineWin 小部件中创建另一个 QTextEdit,这是不必要的,而且您正在移动 QTextEdit 的光标,该光标不是 QMainWindow 中显示的 QTextEdit。考虑到这一点,我创建了一个 QDialog,它应该只接收添加您想要的功能的 QTextEdit。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class GoToDialog(QtWidgets.QDialog):
gotoSignal = QtCore.pyqtSignal(int)
def __init__(self, text_edit, parent=None):
super().__init__(parent)
self.m_text_edit = text_edit
self.spinbox = QtWidgets.QSpinBox(minimum=1)
self.m_text_edit.document().blockCountChanged.connect(self.spinbox.setMaximum)
self.spinbox.setMaximum(self.m_text_edit.document().blockCount())
self.buttonGoto = QtWidgets.QPushButton("Go to...")
self.buttonGoto.clicked.connect(self.onAccepted)
self.buttonCancel = QtWidgets.QPushButton("Cancel")
self.buttonCancel.clicked.connect(self.reject)
vlay = QtWidgets.QVBoxLayout(self)
hlay = QtWidgets.QHBoxLayout()
hlay.addWidget(self.buttonGoto)
hlay.addWidget(self.buttonCancel)
vlay.addWidget(QtWidgets.QLabel("Go to..."))
vlay.addWidget(self.spinbox)
vlay.addLayout(hlay)
self.setFixedSize(300, 100)
def onAccepted(self):
n = self.spinbox.value() - 1
if 0 <= n < self.m_text_edit.document().blockCount():
cursor = QtGui.QTextCursor(
self.m_text_edit.document().findBlockByLineNumber(n)
)
self.m_text_edit.setTextCursor(cursor)
self.reject()
class Writter(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.text_edit = QtWidgets.QTextEdit()
self.setCentralWidget(self.text_edit)
self.goto_dialog = GoToDialog(self.text_edit, self)
menubar = self.menuBar()
editMenu = menubar.addMenu("Edit")
goto_edit = QtWidgets.QAction("Go To...", self)
goto_edit.setShortcut("Ctrl+T")
goto_edit.triggered.connect(self.goto_dialog.show)
editMenu.addAction(goto_edit)
self.resize(600, 500)
self.center()
def center(self):
self.setGeometry(
QtWidgets.QStyle.alignedRect(
QtCore.Qt.LeftToRight,
QtCore.Qt.AlignCenter,
self.size(),
QtWidgets.qApp.desktop().availableGeometry(),
)
)
def main():
app = QtWidgets.QApplication(sys.argv)
w = Writter()
w.show()
return app.exec_()
if __name__ == "__main__":
sys.exit(main())
关于python - 移动光标线位置 QTextEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57263368/
我有一个包含透明区域的 png,并将其设置为图像标签。 当光标位于图像的不透明部分上时,如何将光标设置为手? 谢谢 最佳答案 为此,您需要查看位图本身。 WPF 的 HitTest 机制认为任何使用“
我想隐藏圆形仪表的手(那就是中间的东西,对吧?)。到目前为止,我尝试过: myCircularGauge.getHand().setVisible(false); 但是,绘制图表时这似乎会产生崩溃。如
我有两张图片:一张是张开的手,一张是抓着的手。我希望一个简单的“onmousedown”和“onmouseup”函数有助于制作出著名的抓手,您可以在类似谷歌地图的东西中看到它。但...抱歉,从头开始:
是否可以在sequelize迁移中使用光标?我正在尝试创建 DML 脚本,其想法是循环表中的值,即。使用游标输入日期,然后将值插入到其他表中,即。光标内的膳食日。 table : day dayId
我正在尝试使用格式加载值 +02:00 - mysql> select SUBSTR('2016-01-12T14:29:31.000+02:00',24,6); +02:00
我一直在尝试构建一个基于网络的文本编辑器。作为该过程的一部分,我正在尝试动态创建和修改基于元素的事件和用于字体编辑的击键事件。在这个特别的jsfiddle示例 我试图在按下 CTRL+b 并将焦点/插
我同时使用了 supertab 和 snipmate 插件。假设我正在使用 snipmate 创建一个 if 语句结构。在 if 语句中完成添加语句后,如何快速将光标移动到 if 语句之后。例如: i
我正在为我的 BlackBerry 项目创建一个搜索框,但看起来 BlackBerry 没有用于创建单行 EditField 的 API。我通过扩展 BasicEditField 和覆盖布局和绘制等方
我想知道如何获得 not-allowed光标在我禁用的链接上。我试图将它添加到禁用事件中,但它在那里不起作用,然后我尝试使用相同的光标事件引入悬停效果。关于如何让它发挥作用的任何想法?我在这里包含了我
在 Delphi 6 中,我可以使用 Screen.Cursor 更改所有表单的鼠标光标: procedure TForm1.Button1Click(Sender: TObject); begin
这个 Meteor 服务器代码需要每 n 秒从集合中打印一次文档,我该如何让它工作?谢谢 myCol.find({abc: undefined}).forEach( fun
在这个论坛上花了相当长的时间寻找与我的问题类似的答案,但找不到符合我的情况的答案。 我有一个 HTML 表单,通过 javascript 将其提交到我的 aspx 页面。 function Submi
是否可以在网页上创建透明的 HTML 光标?我使用 div 作为光标,我想让 div 50% 透明: http://jsfiddle.net/mCgmP/16/ I want this cursor
我正在使用 Cursor 来获取存储在我的 SQLite 数据库中的一些数据。当我的光标有数据库中的一些数据时,代码可以正常工作。但是,当 Cursor 不包含任何数据时,我在 Cursor.move
我希望隐藏特定范围的 x 和 y 位置中的光标。这是一些示例代码,代表了我想要做的事情。 if(x >= xLowerBound && x = yLowerBound + 20 && y = xLow
我有一个 .jsp 页面,用户可以在其中输入信息,然后使用保存按钮保存。该应用程序可以运行,但由于按钮的单击事件正在运行 Java 代码,然后将保存的信息添加到 Oracle 数据库,因此需要一些时间
为什么 Android 中 Cursor 没有 moveBeforeFirst()? 其他风格的 Java 中也有类似的方法,如果您需要重新迭代结果集(例如,在 while(cursor.moveTo
我想使用 Tkinter 捕获相对鼠标运动。我附上一个监听器并且能够获取鼠标移动。但是,我希望能够“捕获”/“锁定”光标,使其不可见并且无法离开窗口(就像游戏一样)。我的目标是获得相对鼠标移动而不受窗
当应用程序同步时,我尝试更新数据库中每一行的“html”列。我用过这个教程Here将应用程序添加到“配置文件”列表中。这是我在 SyncAdapter 中使用的代码: private static v
我正在使用 Uploadify带有图像按钮。一切正常。除了,我需要在鼠标悬停时使用 cursor:crosshair; 而不是 cursor:default;。 我试着在 CSS 中这样设置它: ob
我是一名优秀的程序员,十分优秀!