fix 23
This commit is contained in:
36
dialogs.py
36
dialogs.py
@@ -6,6 +6,8 @@ from PySide6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel,
|
||||
QMessageBox, QCheckBox, QListWidget, QListWidgetItem)
|
||||
from PySide6.QtCore import Qt
|
||||
|
||||
from logger_config import setup_logging, logger
|
||||
|
||||
class CreatePartitionDialog(QDialog):
|
||||
def __init__(self, parent=None, disk_path="", total_disk_mib=0.0, max_available_mib=0.0):
|
||||
super().__init__(parent)
|
||||
@@ -15,14 +17,17 @@ class CreatePartitionDialog(QDialog):
|
||||
self.disk_path = disk_path
|
||||
self.total_disk_mib = total_disk_mib # 磁盘总大小 (MiB)
|
||||
self.max_available_mib = max_available_mib # 可用空间 (MiB)
|
||||
logger.debug(f"CreatePartitionDialog initialized for {disk_path}. Total MiB: {total_disk_mib}, Max Available MiB: {max_available_mib}")
|
||||
|
||||
self.partition_table_type_combo = QComboBox()
|
||||
self.partition_table_type_combo.addItems(["gpt", "msdos"])
|
||||
|
||||
self.size_spinbox = QDoubleSpinBox()
|
||||
# 调整最小值为 0.01 GB (约 10MB),并确保最大值不小于最小值
|
||||
calculated_max_gb = self.max_available_mib / 1024.0
|
||||
self.size_spinbox.setMinimum(0.01)
|
||||
self.size_spinbox.setMaximum(max(0.01, self.max_available_mib / 1024.0)) # 将 MiB 转换为 GB 显示
|
||||
self.size_spinbox.setMaximum(max(0.01, calculated_max_gb)) # 将 MiB 转换为 GB 显示
|
||||
logger.debug(f"Size spinbox max set to: {self.size_spinbox.maximum()} GB (calculated from {calculated_max_gb} GB)")
|
||||
self.size_spinbox.setSuffix(" GB")
|
||||
self.size_spinbox.setDecimals(2)
|
||||
|
||||
@@ -54,21 +59,34 @@ class CreatePartitionDialog(QDialog):
|
||||
def _connect_signals(self):
|
||||
self.confirm_button.clicked.connect(self.accept)
|
||||
self.cancel_button.clicked.connect(self.reject)
|
||||
# 信号连接保持不变,但 _toggle_size_input 方法内部将直接查询复选框状态
|
||||
self.use_max_space_checkbox.stateChanged.connect(self._toggle_size_input)
|
||||
|
||||
def _initialize_state(self):
|
||||
# 根据默认选中状态设置 spinbox
|
||||
self._toggle_size_input(self.use_max_space_checkbox.checkState())
|
||||
|
||||
def _toggle_size_input(self, state):
|
||||
if state == Qt.Checked:
|
||||
self.size_spinbox.setDisabled(True)
|
||||
self.size_spinbox.setValue(self.size_spinbox.maximum()) # 设置为最大可用 GB
|
||||
else:
|
||||
self.size_spinbox.setDisabled(False)
|
||||
# 如果之前是最大值,取消勾选后,恢复到最小值或一个合理值
|
||||
def _toggle_size_input(self, state): # state 参数仍然接收,但不再直接用于判断
|
||||
# 直接查询复选框的当前状态,而不是依赖信号传递的 state 参数
|
||||
is_checked = self.use_max_space_checkbox.isChecked()
|
||||
logger.debug(f"[_toggle_size_input] Called. Checkbox isChecked(): {is_checked}, signal state: {state}")
|
||||
|
||||
if is_checked:
|
||||
logger.debug(f"[_toggle_size_input] Checkbox is CHECKED. Disabling spinbox and setting value to max.")
|
||||
self.size_spinbox.setEnabled(False) # 禁用 spinbox
|
||||
max_val = self.size_spinbox.maximum()
|
||||
self.size_spinbox.setValue(max_val) # 设置为最大可用 GB
|
||||
logger.debug(f"[_toggle_size_input] Spinbox value set to max: {max_val} GB.")
|
||||
else: # is_checked is False
|
||||
logger.debug(f"[_toggle_size_input] Checkbox is UNCHECKED. Enabling spinbox.")
|
||||
self.size_spinbox.setEnabled(True) # 启用 spinbox
|
||||
# 如果之前是最大值,取消勾选后,恢复到最小值,方便用户输入自定义值
|
||||
if self.size_spinbox.value() == self.size_spinbox.maximum():
|
||||
self.size_spinbox.setValue(self.size_spinbox.minimum())
|
||||
min_val = self.size_spinbox.minimum()
|
||||
self.size_spinbox.setValue(min_val)
|
||||
logger.debug(f"[_toggle_size_input] Spinbox was at max, reset to min: {min_val} GB.")
|
||||
else:
|
||||
logger.debug(f"[_toggle_size_input] Spinbox was not at max, keeping current value: {self.size_spinbox.value()} GB.")
|
||||
|
||||
def get_partition_info(self):
|
||||
size_gb = self.size_spinbox.value()
|
||||
|
||||
Reference in New Issue
Block a user