Ordner inhalt mit checkbosen anzeigen klappt nicht
Verfasst: Dienstag 30. Januar 2024, 04:20
Hallo, erst einmal ich bin blutiger Anfänger!
Leider komme ich nicht mehr weiter und könnte Hilfe gebrauchen, ich bin dabei ein kleines Tool zu erstellen.
Ich müsste einen ausgewählten Ordnerinhalt anzeigen lassen, um dann die ausgewählte Datei zu verwenden.
Deswegen wollte ich die Datei liste mit checkboxen versehen, aber es klappt einfach nicht.
Entweder werden die checkboxen angezeigt, aber die Dateinamen nicht oder halt andersrum und ich habe echt schon viel getestet.
*Schaut furchtbar aus, ich weiß, aber bin halt am Experimentieren
*
main.py
tab1.py
styles.py
Leider komme ich nicht mehr weiter und könnte Hilfe gebrauchen, ich bin dabei ein kleines Tool zu erstellen.
Ich müsste einen ausgewählten Ordnerinhalt anzeigen lassen, um dann die ausgewählte Datei zu verwenden.
Deswegen wollte ich die Datei liste mit checkboxen versehen, aber es klappt einfach nicht.
Entweder werden die checkboxen angezeigt, aber die Dateinamen nicht oder halt andersrum und ich habe echt schon viel getestet.
*Schaut furchtbar aus, ich weiß, aber bin halt am Experimentieren

main.py
Code: Alles auswählen
import os
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QLabel, QPushButton, QFileDialog, \
QListWidget, QListWidgetItem, QTabWidget, QGridLayout, QHBoxLayout, QLineEdit, QSpacerItem, QWidget, \
QSizePolicy
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt, QTimer, QSize, QPoint
from styles import get_stylesheet
from custom_menu_bar import CustomMenuBar
from process_status_widget import ProcessStatusWidget
import ctypes
class MeinFenster(QMainWindow):
def __init__(self):
super().__init__()
self.init_stylesheet()
self.setWindowTitle('Mein erstes Qt5-Fenster')
self.setGeometry(100, 100, 800, 600)
custom_menubar = CustomMenuBar(self)
self.setCentralWidget(custom_menubar)
tab_widget = QTabWidget()
corner_widget = self.create_corner_widget()
tab_widget.setCornerWidget(corner_widget, Qt.TopRightCorner)
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_progress)
self.timer.start(1000)
self.process_running = False
self.moving = False
tab1 = self.create_tab_1()
tab_widget.addTab(tab1, 'Tab 1')
tab_widget.addTab(QWidget(), 'Tab 2') # Platzhalter für Tab 2
tab_widget.addTab(QWidget(), 'Tab 3') # Platzhalter für Tab 3
self.setCentralWidget(tab_widget)
if sys.platform.startswith('win'):
self.setup_windows_frame()
def create_corner_widget(self):
corner_widget = QWidget()
corner_layout = QHBoxLayout(corner_widget)
beenden_button = QPushButton('', self)
beenden_button.clicked.connect(self.close)
beenden_button.setIcon(QIcon('exit_button.png'))
beenden_button.setStyleSheet("background: transparent; bold; border: 0px solid black; padding: 5px;")
beenden_button.setIconSize(QSize(24, 24))
corner_layout.addWidget(beenden_button)
corner_widget.setStyleSheet("background: transparent;")
corner_layout.setContentsMargins(0, 0, 0, 0)
return corner_widget
def create_tab_1(self):
tab1 = QWidget()
layout1 = QVBoxLayout(tab1)
label = QLabel('Inhalt für Tab 1')
layout1.addWidget(label)
cd_layout = self.create_cd_layout()
layout1.addLayout(cd_layout)
self.list_widget = QListWidget(tab1)
layout1.addWidget(self.list_widget)
output_layout = self.create_output_layout()
layout1.addLayout(output_layout)
self.process_status = ProcessStatusWidget()
layout1.addWidget(self.process_status)
buttons_layout = self.create_buttons_layout()
layout1.addLayout(buttons_layout)
return tab1
def create_cd_layout(self):
cd_layout = QGridLayout()
spacer = QSpacerItem(10, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)
cd_layout.addItem(spacer, 0, 0)
cd_label = QLabel('CD Image Verzeichnis')
cd_layout.addWidget(cd_label, 0, 1)
self.cd_path_label = QLineEdit('')
self.cd_path_label.setFixedWidth(500)
cd_layout.addWidget(self.cd_path_label, 0, 2)
cd_select_button = QPushButton('Durchsuchen')
cd_layout.addWidget(cd_select_button, 0, 3)
cd_select_button.clicked.connect(self.select_folder)
spacer = QSpacerItem(35, 30, QSizePolicy.Expanding, QSizePolicy.Minimum)
cd_layout.addItem(spacer, 0, 4)
return cd_layout
def create_output_layout(self):
output_layout = QGridLayout()
spacer = QSpacerItem(10, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)
output_layout.addItem(spacer, 0, 0)
output_label = QLabel('Ausgabe Verzeichnis')
output_layout.addWidget(output_label, 0, 1)
self.output_path_label = QLineEdit('')
self.output_path_label.setFixedWidth(500)
output_layout.addWidget(self.output_path_label, 0, 2)
output_select_button = QPushButton('Durchsuchen')
output_layout.addWidget(output_select_button, 0, 3)
output_select_button.clicked.connect(self.select_output_folder)
spacer = QSpacerItem(33, 30, QSizePolicy.Expanding, QSizePolicy.Minimum)
output_layout.addItem(spacer, 0, 4)
return output_layout
def create_buttons_layout(self):
buttons_layout = QHBoxLayout()
buttons_layout.addStretch(1)
start_button = QPushButton('Starten', self)
start_button.clicked.connect(self.start_process)
start_button.setFixedWidth(100)
buttons_layout.addWidget(start_button)
buttons_layout.addSpacing(10)
cancel_button = QPushButton('Abbrechen', self)
cancel_button.clicked.connect(self.cancel_process)
cancel_button.setFixedWidth(100)
buttons_layout.addWidget(cancel_button)
spacer = QWidget()
spacer.setFixedWidth(10)
buttons_layout.addWidget(spacer)
spacer_bottom = QWidget()
spacer_bottom.setFixedHeight(40)
buttons_layout.addWidget(spacer_bottom)
start_button.setStyleSheet("QPushButton { border: 2px solid green; }")
cancel_button.setStyleSheet("QPushButton { border: 2px solid green; }")
return buttons_layout
def setup_windows_frame(self):
hwnd = ctypes.windll.kernel32.GetConsoleWindow()
ctypes.windll.user32.ShowWindow(hwnd, 0)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setGeometry(100, 100, 800, 600)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
delta = QPoint(event.globalPos() - self.oldPos)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
def mouseReleaseEvent(self, event):
pass
def init_stylesheet(self):
stylesheet = get_stylesheet()
self.setStyleSheet(stylesheet)
def update_progress(self):
if self.process_running:
self.process_status.update_status()
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.moving = False
def select_folder(self):
folder = QFileDialog.getExistingDirectory(self, 'Ordner auswählen')
self.list_widget.clear()
for file_name in os.listdir(folder):
item = QListWidgetItem(file_name)
self.list_widget.addItem(item)
self.cd_path_label.setText(folder)
def select_output_folder(self):
folder = QFileDialog.getExistingDirectory(self, 'Ausgabeordner auswählen')
self.output_path_label.setText(folder)
def start_process(self):
self.process_status.update_status()
self.process_running = True
def cancel_process(self):
self.process_status.set_process_complete()
self.process_running = False
if __name__ == '__main__':
app = QApplication(sys.argv)
fenster = MeinFenster()
fenster.show()
sys.exit(app.exec_())
tab1.py
Code: Alles auswählen
import os
from PyQt5.QtWidgets import QVBoxLayout, QLabel, QPushButton, QFileDialog, \
QListWidget, QListWidgetItem, QWidget, QGridLayout, QLineEdit, QCheckBox, QSpacerItem, QSizePolicy
class Tab1(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout(self)
label = QLabel('Inhalt für Tab 1')
layout.addWidget(label)
cd_layout = self.create_cd_layout()
layout.addLayout(cd_layout)
self.list_widget = QListWidget(self)
layout.addWidget(self.list_widget)
# Hinzugefügt: Checkboxen für Dateien
self.file_checkbox_dict = {}
for file_name in os.listdir('.'):
checkbox = QCheckBox(file_name)
item = QListWidgetItem()
self.list_widget.addItem(item)
self.list_widget.setItemWidget(item, checkbox)
self.file_checkbox_dict[file_name] = checkbox
output_layout = self.create_output_layout()
layout.addLayout(output_layout)
def create_cd_layout(self):
cd_layout = QGridLayout()
spacer = QSpacerItem(10, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)
cd_layout.addItem(spacer, 0, 0)
cd_label = QLabel('CD Image Verzeichnis')
cd_layout.addWidget(cd_label, 0, 1)
self.cd_path_label = QLineEdit('')
self.cd_path_label.setFixedWidth(500)
cd_layout.addWidget(self.cd_path_label, 0, 2)
cd_select_button = QPushButton('Durchsuchen')
cd_layout.addWidget(cd_select_button, 0, 3)
# Hier verbinde das Signal mit der Methode
cd_select_button.clicked.connect(self.select_folder)
spacer = QSpacerItem(35, 30, QSizePolicy.Expanding, QSizePolicy.Minimum)
cd_layout.addItem(spacer, 0, 4)
return cd_layout
def create_output_layout(self):
output_layout = QGridLayout()
spacer = QSpacerItem(10, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)
output_layout.addItem(spacer, 0, 0)
output_label = QLabel('Ausgabe Verzeichnis')
output_layout.addWidget(output_label, 0, 1)
self.output_path_label = QLineEdit('')
self.output_path_label.setFixedWidth(500)
output_layout.addWidget(self.output_path_label, 0, 2)
output_select_button = QPushButton('Durchsuchen')
output_layout.addWidget(output_select_button, 0, 3)
# Hier verbinde das Signal mit der Methode
output_select_button.clicked.connect(self.select_output_folder)
spacer = QSpacerItem(33, 30, QSizePolicy.Expanding, QSizePolicy.Minimum)
output_layout.addItem(spacer, 0, 4)
return output_layout
def select_folder(self):
folder = QFileDialog.getExistingDirectory(self, 'Ordner auswählen')
self.list_widget.clear()
for file_name in os.listdir(folder):
item = QListWidgetItem(file_name)
self.list_widget.addItem(item)
self.cd_path_label.setText(folder)
def select_output_folder(self):
folder = QFileDialog.getExistingDirectory(self, 'Ausgabeordner auswählen')
self.output_path_label.setText(folder)
styles.py
Code: Alles auswählen
def get_stylesheet():
return """
QMainWindow {
background-color: rgba(0, 0, 0, 150);
color: #00FF00;
border: 2px solid #00FF00;
}
QTabBar::tab {
color: #177d12;
border-top: 1px solid #177d12;
border-left: 1px solid #177d12;
border-right: 1px solid #177d12;
border-bottom: 1px solid #177d12;
border-radius: 3px 3px 0px 0px;
padding: 5px;
}
QTabBar::tab:selected {
color: #00FF00;
border-top: 1px solid #00FF00;
border-left: 1px solid #00FF00;
border-right: 1px solid #00FF00;
border-bottom: 1px solid #000000;
border-radius: 3px 3px 0px 0px;
padding: 5px;
}
QTabWidget::pane {
border: 1px solid #00FF00;
border-top: 1px solid #00FF00;
border-left: 1px solid #00FF00;
border-right: 1px solid #00FF00;
border-bottom: 1px solid #00FF00;
}
QWidget {
background-color: #000000;
color: #00FF00;
}
QLineEdit {
background-color: #000000;
color: #00FF00;
border: 1px solid #00FF00;
}
QPushButton {
background-color: #000000;
color: #00FF00;
border: 1px solid #00FF00;
padding: 2px;
width: 100px; /* Breite des Buttons */
height: 11px; /* Höhe des Buttons */
}
QListWidget {
background-color: #000000;
color: #00FF00;
border: 1px solid #00FF00;
}
QLabel {
background-color: #000000;
color: #00FF00;
}
QProgressBar {
border: 2px solid #00FF00;
border-radius: px;
text-align: center;
background-color: transparent;
}
QProgressBar::chunk {
background-color: #0a500d;
border-radius: 5px;
}
}
"""