TexeEdit录入问题求教~~
本帖最后由 凊风 于 2024-3-17 16:23 编辑我用的是PySide6,共有3个窗体:
class BaseWindow(QWidget):
......
class WindowA(BaseWindow):
.....
class WindowB(BaseWindow):
.....
def __init__(self):
super().__init__()
# 设置窗体大小和背景颜色
self.setFixedSize(1440, 900)
其中WindowB(BaseWindow)窗体有控件self.textEdit_5:
self.textEdit_5 = QtWidgets.QTextEdit(parent=self)
self.textEdit_5.setGeometry(QtCore.QRect(480, 250, 921, 295))
font = QtGui.QFont()
font.setPointSize(16)
font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferDefault)
self.textEdit_5.setFont(font)
self.textEdit_5.setReadOnly(True)
self.textEdit_5.setStyleSheet("background-color: rgb(204, 204, 204);")
self.textEdit_5.setFrameShape(QtWidgets.QFrame.Shape.WinPanel)
self.textEdit_5.setObjectName("textEdit_5")
self.textEdit_5.setStyleSheet("font-family:'隶书'; font-size:17pt; line-height: 20px;")
TextEdit_5通过调用self.redirect_output把终端窗口输出内容显示到TextEdit_5中:
# 重定向输出到TextEdit_5
self.redirect_output(self.textEdit_5)
def redirect_output(self, output_widget):
class StdoutRedirect:
def __init__(self, widget):
self.widget = widget
def write(self, text):
self.widget.append(text)
def flush(self):
pass
sys.stdout = StdoutRedirect(output_widget)
现需求是:让用户在TextEdit_5输出内容,且把用户录入内容储存起来,
意思就是把TextEdit_5作为终端命令窗口来用。请问需要如何处理?
要实现将用户在TextEdit_5中输入的内容存储起来,你可以通过以下步骤来处理:
1. 创建一个按钮或者其他交互控件,当用户点击该按钮时,执行保存用户输入内容的操作。
2. 在WindowB类中添加一个保存用户输入内容的方法。该方法可以将TextEdit_5中的文本获取并保存到一个变量中。
3. 可以考虑将保存用户输入内容的方法绑定到按钮的点击事件上,这样当用户点击按钮时,就会触发保存用户输入内容的操作。
下面是一个示例代码,展示了如何实现上述需求:
class WindowB(BaseWindow):
def __init__(self):
super().__init__()
self.textEdit_5 = QtWidgets.QTextEdit(parent=self)
# 其他初始化代码...
# 创建保存按钮
self.save_button = QtWidgets.QPushButton("保存", parent=self)
self.save_button.clicked.connect(self.save_user_input)
def save_user_input(self):
# 获取用户输入的内容
user_input = self.textEdit_5.toPlainText()
# 处理用户输入的内容,例如保存到文件中或者其他操作
# 这里仅仅将用户输入的内容打印出来作为示例
print(f"用户输入的内容: {user_input}")
在上述代码中,我们创建了一个保存按钮(save_button)并将其绑定到了save_user_input方法。当用户点击保存按钮时,save_user_input方法会被调用,将TextEdit_5中的文本获取并保存到`user_input`变量中。你可以在save_user_input方法中进行进一步处理,例如将用户输入的内容保存到文件中或者执行其他操作。
希望以上解释能对你有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 14:58
要实现将用户在TextEdit_5中输入的内容存储起来,你可以通过以下步骤来处理:
1. 创建一个按钮或者其他 ...
可能我没有表达清楚:
我在的代码中, self.textEdit_5在这之前是只读的,仅仅做为一个终端的显示窗口让用户看到程序的运行动态。
self.textEdit_5.setReadOnly(True)
然后按钮3调用进程:self.pushButton_3.clicked.connect(lambda: self.start_thread('xls'))
def start_thread(self, file_type):
thread = MyThread(file_type, self.File_Path, self, self.textEdit_5)
thread.start()
class MyThread(threading.Thread):
def __init__(self, file_type, file_path, windowB, textEdit_5):
super().__init__()
self.File_Type = file_type
self.File_Path = file_path
self.window = windowB
self.textEdit_5 = textEdit_5
def run(self):
file_path = os.path.join(self.File_Path, file_name)
Exclud_Book = xlrd.open_workbook(file_path)
此时self.textEdit_5就需要关闭只读属性,接受用户的录入并储存起来。
self.textEdit_5.setReadOnly(False)
for sheet_name in Exclud_Book.sheet_names():
exclude_rows_input = input()
if exclude_rows_input:
self.exclude_rows =
exclude_cols_input = input()
if exclude_cols_input:
exclude_cols =
print(exclude_rules)
请问需要怎么处理?
凊风 发表于 2024-03-17 15:18
可能我没有表达清楚:
我在的代码中, self.textEdit ...
明白了你的需求。在代码中,你希望在特定的情况下将self.textEdit_5变为可编辑状态,以接受用户的输入并进行存储。你可以按照以下方式处理:1. 在start_thread方法中调用MyThread线程之前,将self.textEdit_5设置为可编辑状态。2. 在MyThread线程的run方法中,通过使用`self.window.textEdit_5.toPlainText()`获取用户输入的内容,并进行存储或其他操作。3. 在run方法适当的位置,将self.textEdit_5重新设置为只读状态,以便再次用作终端显示窗口。下面是更改后的代码示例:class WindowB(BaseWindow): def __init__(self): super().__init__() self.textEdit_5 = QtWidgets.QTextEdit(parent=self) # 其他初始化代码... # 创建保存按钮 self.save_button = QtWidgets.QPushButton("保存", parent=self) self.save_button.clicked.connect(self.save_user_input) def start_thread(self, file_type): # 允许TextEdit_5编辑 self.textEdit_5.setReadOnly(False) thread = MyThread(file_type, self.File_Path, self, self.textEdit_5) thread.start() class MyThread(threading.Thread): def __init__(self, file_type, file_path, windowB, textEdit_5): super().__init__() self.File_Type = file_type self.File_Path = file_path self.window = windowB self.textEdit_5 = textEdit_5 def run(self): file_path = os.path.join(self.File_Path, file_name) Exclud_Book = xlrd.open_workbook(file_path) # 获取用户输入的内容 exclude_rows_input = self.textEdit_5.toPlainText() if exclude_rows_input: self.exclude_rows = int(exclude_rows_input) exclude_cols_input = self.textEdit_5.toPlainText() if exclude_cols_input: exclude_cols = int(exclude_cols_input) # 其他操作... # 将TextEdit_5重新设置为只读状态 self.textEdit_5.setReadOnly(True)在上述代码中,我们在start_thread方法中将self.textEdit_5设置为可编辑状态,使之可以接受用户的输入。然后,在MyThread线程的run方法中,使用`self.textEdit_5.toPlainText()`获取用户输入的内容并进行处理。在适当的位置,通过`self.textEdit_5.setReadOnly(True)`将self.textEdit_5重新设置为只读状态,以再次用作终端显示窗口。希望这次能更好地满足你的需求!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 15:23
明白了你的需求。在代码中,你希望在特定的情况下将self.textEdit_5变为可编辑状态,以接受用户的输入 ...
回复请注意python格式 凊风 发表于 2024-03-17 15:29
回复请注意python格式
非常抱歉,我会注意Python代码格式。以下是按照正确的Python格式修改后的代码示例:
class WindowB(BaseWindow):
def __init__(self):
super().__init__()
self.textEdit_5 = QtWidgets.QTextEdit(parent=self)
# 其他初始化代码...
# 创建保存按钮
self.save_button = QtWidgets.QPushButton("保存", parent=self)
self.save_button.clicked.connect(self.save_user_input)
def start_thread(self, file_type):
# 允许TextEdit_5编辑
self.textEdit_5.setReadOnly(False)
thread = MyThread(file_type, self.File_Path, self, self.textEdit_5)
thread.start()
class MyThread(threading.Thread):
def __init__(self, file_type, file_path, windowB, textEdit_5):
super().__init__()
self.File_Type = file_type
self.File_Path = file_path
self.window = windowB
self.textEdit_5 = textEdit_5
def run(self):
file_path = os.path.join(self.File_Path, file_name)
Exclud_Book = xlrd.open_workbook(file_path)
# 获取用户输入的内容
exclude_rows_input = self.textEdit_5.toPlainText()
if exclude_rows_input:
self.exclude_rows = int(exclude_rows_input)
exclude_cols_input = self.textEdit_5.toPlainText()
if exclude_cols_input:
exclude_cols = int(exclude_cols_input)
# 其他操作...
# 将TextEdit_5重新设置为只读状态
self.textEdit_5.setReadOnly(True)
非常抱歉之前的错误,希望这次能满足你的要求!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 15:29
非常抱歉,我会注意Python代码格式。以下是按照正确的Python格式修改后的代码示例:
请问这段代码里面怎么保存用户的两次录入内容呢? 凊风 发表于 2024-03-17 15:43
请问这段代码里面怎么保存用户的两次录入内容呢?
如果你想要保存用户两次录入的内容,你可以在WindowB类中添加一个列表变量来存储这些内容。每次保存用户输入时,将用户输入的内容添加到列表中即可。以下是修改后的代码示例:class WindowB(BaseWindow): def __init__(self): super().__init__() self.textEdit_5 = QtWidgets.QTextEdit(parent=self) # 其他初始化代码... self.user_inputs = [] # 创建保存按钮 self.save_button = QtWidgets.QPushButton("保存", parent=self) self.save_button.clicked.connect(self.save_user_input) def save_user_input(self): # 获取用户输入的内容 user_input = self.textEdit_5.toPlainText() # 将用户输入的内容添加到列表中 self.user_inputs.append(user_input) # 处理用户输入的内容,例如保存到文件中或者其他操作 # 这里仅仅将用户输入的内容打印出来作为示例 print(f"用户输入的内容: {user_input}") print(f"所有用户输入的内容: {self.user_inputs}")在上面的代码中,我们添加了一个名为`user_inputs`的列表变量,用于存储用户输入的内容。在`save_user_input`方法中,获取用户输入的内容并将其添加到`user_inputs`列表中。你可以根据需求进一步处理保存的内容,例如将其保存到文件中或执行其他操作。最后,我们打印用户输入的内容和整个列表内容,以方便查看结果。希望这次回答能够解决你的问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 15:43
如果你想要保存用户两次录入的内容,你可以在WindowB类中添加一个列表变量来存储这些内容。每次保存用 ...
回复请注意python格式 凊风 发表于 2024-03-17 15:44
回复请注意python格式
非常抱歉,我没有按照Python的格式回答你的问题。请看下面是按照Python格式修改后的代码示例:
class WindowB(BaseWindow):
def __init__(self):
super().__init__()
self.textEdit_5 = QtWidgets.QTextEdit(parent=self)
# 其他初始化代码...
self.user_inputs = []
# 创建保存按钮
self.save_button = QtWidgets.QPushButton("保存", parent=self)
self.save_button.clicked.connect(self.save_user_input)
def save_user_input(self):
# 获取用户输入的内容
user_input = self.textEdit_5.toPlainText()
# 将用户输入的内容添加到列表中
self.user_inputs.append(user_input)
# 处理用户输入的内容,例如保存到文件中或其他操作
# 这里仅将用户输入的内容打印出来作为示例
print(f"用户输入的内容: {user_input}")
print(f"所有用户输入的内容: {self.user_inputs}")
以上就是按照Python格式修改后的代码示例。再次抱歉给你带来不便,希望这次回答能够满足你的需求!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 15:44
非常抱歉,我没有按照Python的格式回答你的问题。请看下面是按照Python格式修改后的代码示例:
我现在写的是:
class WindowB(BaseWindow):
def __init__(self):
super().__init__()
self.textEdit_5 = QtWidgets.QTextEdit(parent=self)
# 其他初始化代码...
exclude_rules = {}
# 绑定按钮点击事件
self.pushButton_3.clicked.connect(lambda: self.start_thread('xls'))
def start_thread(self, file_type):
# 允许TextEdit_5编辑
self.textEdit_5.setReadOnly(False)
# 在 `start_thread` 方法中创建 MyThread 对象时,将 File_Path和self 作为参数传递给它:
thread = MyThread(file_type, self.File_Path, self, self.textEdit_5,
self.pushButton_11, self.pushButton_12)
thread.start()
class MyThread(threading.Thread):
# 在 MyThread 类中,修改 `__init__` 方法,接收File_Path和window,并将其存储为实例属性:
def __init__(self, file_type, file_path, windowB, textEdit_5, pushButton_11, pushButton_12):
super().__init__()
self.File_Type = file_type
self.File_Path = file_path
self.window = windowB
self.textEdit_5 = textEdit_5
self.pushButton_11 = pushButton_11
self.pushButton_12 = pushButton_12
def run(self):
file_path = os.path.join(self.File_Path, file_name)
Exclud_Book = xlrd.open_workbook(file_path)
self.textEdit_5.setReadOnly(False)
for sheet_name in Exclud_Book.sheet_names():
exclude_rows = []
exclude_rows_input = self.textEdit_5.toPlainText()
self.pushButton_11.setEnabled(True)
self.pushButton_12.setEnabled(True)
if exclude_rows_input:
if self.pushButton_11.clicked:
self.exclude_rows =
elif self.pushButton_12.clicked:
print('请重新录入行排除规则!')
continue
exclude_cols = []
exclude_cols_input = self.textEdit_5.toPlainText()
if exclude_cols_input:
exclude_cols =
exclude_rules = {'行': exclude_rows, '列': exclude_cols}
print(exclude_rules)
但执行时会报错:
Exception in thread Thread-1:
Traceback (most recent call last):
File "D:\Tools\Python\Lib\threading.py", line 1045, in _bootstrap_inner
self.run()
File "D:\Python\pythonProject\20240317\xtt031703.py", line 1104, in run
self.exclude_rows =
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Python\pythonProject\20240317\xtt031703.py", line 1104, in <listcomp>
self.exclude_rows =
^^^^^^^^
ValueError: invalid literal for int() with base 10: "尊敬的用户,欢迎您使用本系统!”
为什么报错会指向 "尊敬的用户,欢迎您使用本系统!”这一句啊,奇怪了?请问要怎么处理? 凊风 发表于 2024-03-17 16:34
我现在写的是:
class WindowB(BaseWindow):
...
根据你提供的代码和错误信息,看起来问题出现在以下这一段代码中:
exclude_rows_input = self.textEdit_5.toPlainText()
self.pushButton_11.setEnabled(True)
self.pushButton_12.setEnabled(True)
if exclude_rows_input:
if self.pushButton_11.clicked:
self.exclude_rows =
elif self.pushButton_12.clicked:
print('请重新录入行排除规则!')
continue
根据错误信息,报错是由于尝试将字符串 "尊敬的用户,欢迎您使用本系统!”转换为整数时导致的。这可能是因为在 `self.exclude_rows =` 这一行的代码中缺少了一个值或一个转换为整数的逻辑。
根据你的需求,可以假设 `exclude_rows` 是一个列表,其中包含用户输入的行号。因此,需要在 `self.exclude_rows =` 这一行的代码中给它赋予一个值(例如一个空列表)。
另外,`self.pushButton_11.clicked` 和 `self.pushButton_12.clicked` 应该是方法而不是属性。你可以使用 `self.pushButton_11.isDown()` 和 `self.pushButton_12.isDown()` 来判断按钮是否被点击。
修正后的代码如下所示:
exclude_rows_input = self.textEdit_5.toPlainText()
self.pushButton_11.setEnabled(True)
self.pushButton_12.setEnabled(True)
if exclude_rows_input:
if self.pushButton_11.isDown():
self.exclude_rows = []
elif self.pushButton_12.isDown():
print('请重新录入行排除规则!')
continue
希望以上修改能够解决你的问题。如果还有其他疑问,请随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 16:35
根据你提供的代码和错误信息,看起来问题出现在以下这一段代码中:
self.exclude_rows =
我这一句的本意是将用户录入的行号(如1,2)转换为python能识别的(0,1)。。
之前的代码段中我也有定义的:
exclude_rules = {}
exclude_rows = []
exclude_cols = []
exclude_rules = {'行': exclude_rows, '列': exclude_cols}
为什么报错会指向 "尊敬的用户,欢迎您使用本系统!”这一句啊,奇怪了? 凊风 发表于 2024-03-17 16:40
self.exclude_rows =
我这一句的本意是将用户录入的 ...
非常抱歉给你带来困惑。根据你提供的代码,报错实际上是发生在 `self.exclude_rows =` 这一行之前,而不是你提到的这一行。错误信息指向的文本 "尊敬的用户,欢迎您使用本系统!”是错误消息的内容,而不是引起错误的原因。
根据之前的代码段,你给出了 `exclude_rows` 的定义和初始化:`exclude_rows = []`。这表明你将 `exclude_rows` 定义为一个空列表。因此,我之前提到的代码修正是不正确的。实际上,问题可能出现在其他地方。
根据你的代码,可以看到你有一个 `file_name` 的变量,但是在前面没有找到对它进行设置的代码。这可能导致在创建文件路径 `file_path` 时出错,从而导致你看到的错误消息。
请确保在使用 `file_name` 创建文件路径之前,`file_name` 变量已经被正确地设置了。检查一下 `file_name` 的赋值部分并确保它从有效的源获取正确的值。
如果问题仍然存在,请提供更多相关的代码,以便我能够更准确地指出错误所在。谢谢!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 16:41
非常抱歉给你带来困惑。根据你提供的代码,报错实际上是发生在 `self.exclude_rows =` 这一行之前,而 ...
file_name有定义的
file_name = "汇总表.xls"
# 拼接文件路径
file_path = os.path.join(self.File_Path, file_name)
Exclud_Book = xlrd.open_workbook(file_path)
应该不是这个问题。 凊风 发表于 2024-03-17 16:42
file_name有定义的
file_name = "汇总表 ...
非常抱歉给你带来困扰。我理解了你的意思,根据你提供的代码,看起来问题确实不在那个地方。 由于你提供的代码仅有一部分,并且没有完整的上下文,因此很难确定导致问题的具体原因。 但是,我可以给出一些可能导致错误的情况供你参考:
1. 检查 `exclude_rows` 变量的赋值和使用是否一致:在之前的代码中,`exclude_rows` 被定义为一个字典的值,但通过 `self.exclude_rows = ` 进行赋值时,你将其定义为空列表。确保在使用 `exclude_rows` 变量之前,其值被正确地设置为字典。
2. 检查其他变量的定义和赋值:除了 `exclude_rows` 外,还要检查其他变量(如 `exclude_cols`、`exclude_rules`、`file_name` 等)的定义和赋值是否正确。确保所有的变量都已经被正确地初始化,并且在使用它们之前没有被修改或删除。
3. 检查可能导致错误的其他代码:虽然你提供了部分代码,但错误可能出现在其他地方。请仔细检查你的代码,并确保所有的语法错误和逻辑错误都得到正确的处理。
如果问题仍然存在,我建议你提供更完整的代码以供检查,或者提供更详细的错误信息。这样我才能够更准确地指出问题所在并给出解决方案。谢谢!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 16:43
非常抱歉给你带来困扰。我理解了你的意思,根据你提供的代码,看起来问题确实不在那个地方。 由于你提 ...
我明白了,错误出在exclude_rows_input = self.textEdit_5.toPlainText()!!
因为之前self.textEdit_5一直在做为终端的GUI显示窗口,所以现在要取用户录入的值来int()的话,就把之前self.textEdit_5显示的内容全部用来int了。。。。。
凊风 发表于 2024-03-17 16:51
我明白了,错误出在exclude_rows_input = self.textEd ...
嗯,你的理解是正确的。由于之前将TextEdit_5用作终端的GUI显示窗口并重定向了输出,所以其中的内容实际上是程序的输出而不是用户的输入。因此,如果直接使用`self.textEdit_5.toPlainText()`来获取用户输入的值进行转换,会导致错误。 解决这个问题的方法是,在用户输入的时候,将其保存到一个变量中供后续使用。例如,在确定用户输入结束时,可以通过按钮点击事件或其他触发机制来执行将TextEdit_5中的文本保存到变量中的操作。然后,你可以将这个变量传递给`int()`函数来进行转换。下面是一个示例代码,展示了如何实现将用户输入的内容保存到变量中并进行转换的操作:WindowB(BaseWindow): def __init__(self): super().__init__() self.textEdit_5 = QtWidgets.QTextEdit(parent=self) # 其他初始化代码... self.save_button = QtWidgets.QPushButton("保存", parent=self) self.save_button.clicked.connect(self.save_user_input) def save_user_input(self): user_input = self.textEdit_5.toPlainText() try: converted_input = int(user_input) # 使用转换后的值进行后续操作 # ... except ValueError: print("无法将用户输入转换为整数")在上述代码中,我们在`save_user_input`方法中获取用户输入的内容,并尝试将其转换为整数。如果转换成功,则可以使用`converted_input`变量进行后续操作;如果转换失败,则会捕获`ValueError`异常。你可以根据需要对尝试转换失败的情况进行处理。希望这次解释能更好地解决你的问题!如果还有其他疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 16:52
嗯,你的理解是正确的。由于之前将TextEdit_5用作终端的GUI显示窗口并重定向了输出,所以其中的内容实 ...
我现在换个self.textEdit_4中用户录入的值得来做为exclude_rows = []和exclude_cols = []试试。 凊风 发表于 2024-03-17 16:56
我现在换个self.textEdit_4中用户录入的值得来做为exc ...
好的,你可以将之前的代码中的`self.textEdit_5`替换为`self.textEdit_4`来使用`self.textEdit_4`中用户录入的值。下面是一个示例代码,展示了如何将`self.textEdit_4`中的值作为`exclude_rows`和`exclude_cols`的输入:class WindowB(BaseWindow): def __init__(self): super().__init__() self.textEdit_4 = QtWidgets.QTextEdit(parent=self) # 其他初始化代码... self.save_button = QtWidgets.QPushButton("保存", parent=self) self.save_button.clicked.connect(self.save_user_input) def save_user_input(self): user_input = self.textEdit_4.toPlainText() try: # 将录入的字符串进行分割,并转换为整数列表 exclude_rows = exclude_cols = # 使用转换后的值进行后续操作 # ... except ValueError: print("无法将用户输入转换为整数")在上述代码中,我们使用`self.textEdit_4.toPlainText()`获取用户输入的内容,并将其分割为逗号分隔的字符串列表。然后,我们使用列表推导式将字符串列表中的每个元素转换为整数,并将它们保存到`exclude_rows`和`exclude_cols`变量中。请注意,这里假设用户输入的是以逗号分隔的整数列表,例如"1,2,3,4"。如果用户输入的格式不符合要求,会捕获`ValueError`异常。你可以根据实际情况进行处理。希望这次的解释对你有帮助!如果还有其他疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]
2